|
|
| [VS2005] 継承コントロールの作り方 |
2006/05/15 |
|
「DataGridViewのCell移動をEnterで」などで既存コントロールを継承して独自機能を実装
したコントロールを解説しているが、この作成方法について詳しく説明していなかったので、超遅ればせながら説明します。
VB6ユーザの方には是非とも理解してもらいたいですね。
■前準備
「ファイル」-「新しいプロジェクト」画面で、「Windowsアプリケーション」を選択して新規プロジェクトを作成します。

■ユーザーコントロールの追加
「プロジェクト」-「ユーザーコントロールの追加」

または、ソリューションエクスプローラのプロジェクト名の上で右クリックから
表示されるメニューの「追加」-「ユーザーコントロール」でユーザーコントロールを追加します。

(デフォルト名はUserControl1.vbになっていますが、適宜名前を変更してください)
■コントロールの継承
「プロジェクト」-「全てのファイルを表示」または、ソリューションエクスプローラの以下のアイコンをクリック

して全てのファイルを表示します。
その中の「UserControl1.vb」に含まれている「UserControl1.Designer.vb」のコードを開きます。
ユーザーコントロールでは、UserControlが継承されているので、
Inherits System.Windows.Forms.UserControl
ようになっていますが、今回は、DataGridViewを継承するようにするので、
Inherits System.Windows.Forms.DataGridView
に変更します。それと同時に、InitializeComponentプロシージャに含まれている、
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
がエラーになるので、この行を削除します。

■確認してみよう
この時点で「ビルド」を行うと、ビルド完了後に、「ツールボックス」に「UserControl1」ユーザーコントロールが追加されます。
まだ特別な機能を実装していないので、既存のDataGridViewコントロールと変わりませんが、フォームに配置すると
DataGRidViewとして利用する事ができます。

■独自機能の実装
ENTERで移動できるようにする為に、以下のコードを「UserControl1.vb」に実装します。
Public Class UserControl1
Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
If (keyData And Keys.KeyCode) = Keys.Enter Then
Return Me.ProcessRightKey(keyData)
End If
Return MyBase.ProcessDialogKey(keyData)
End Function
Protected Overrides Function ProcessDataGridViewKey(ByVal e As KeyEventArgs) As Boolean
If e.KeyCode = Keys.Enter Then
Return Me.ProcessRightKey(e.KeyData)
End If
Return MyBase.ProcessDataGridViewKey(e)
End Function
Public Shadows Function ProcessRightKey(ByVal keyData As Keys) As Boolean
If (keyData And Keys.KeyCode) = Keys.Enter Then
''最終列の場合に次の行の先頭列に移動
If MyBase.CurrentCell.ColumnIndex = MyBase.ColumnCount - 1 _
And MyBase.CurrentCell.RowIndex + 1 <= MyBase.RowCount - 1 Then
MyBase.CurrentCell = MyBase.Rows((MyBase.CurrentCell.RowIndex + 1)).Cells(0)
Return True
End If
End If
Return MyBase.ProcessRightKey(keyData)
End Function
End Class
これで、再度ビルドを行えば、「ツールボックス」に表示されている「UserControl1」ユーザーコントロールがENTERでCELL移動を行うDataGRidViewとして利用できるようになります。
■簡単にしか説明できないので・・・
これを参考に実際に色々と処理を実装してみて、勉強してみてくださいね。
|
|