| ホーム | 掲示板 | 特集 | サンプル | Tips | リンク | その他 | blog 

Tips
[VS2003]
 日付時刻の演算
 ListBoxにファイル一覧
 ファンクションF10
 WMIでサービス一覧
 YAHOO検索エンジン
[VS2005]
 Administrator権限チェック
 非同期ExecuteReader
 非同期ExecuteReader(CallBack)
 パスの結合
 ファイルを圧縮して保存
 コントロール配列の実装
 DataGridViewのCellイベント
 CSVファイルをDataGridViewに表示
 DataGridViewのリンクセルを見やすく
 DataGridViewマウス右ボタンで選択
 DataGridViewスクロール制御
 DataGridViewのCell移動をEnterで
 DataRepeaterコントロール
 GZ圧縮ファイルを解凍
 ファイルの削除
 ディレクトリ有無チェック
 ファイルのダウンロード
 非同期ファイルダウンロード
 ドライブの一覧
 ファイルのコピー
 ファイル有無チェック
 テキストファイルを読み込む
 特定の文字列を含むファイル検索
 フォームを表示(Show)する
 フォルダ一覧取得
 ドライブ詳細情報取得
 ファイル一覧取得
 テンポラリファイルパス取得
 継承コントロールの作り方
 フォルダの移動
 ファイルの移動
 My.Settingの利用
 MySQLCommandで抽出
 MySQLDeleteCommandで削除
 MySQLInsertCommandで挿入
 MySQLSelectCommandで抽出
 MySQLUpdateCommandで更新
 ネットワークに繋がってる?
 ネットワーク接続イベント取得
 固定長テキストファイルを読む
 Oracleストアドファンクション呼出1
 Oracleストアドファンクション呼出2
 OracleのLong Row型の画像を表示
 OracleのLong Row型をファイル保存
 Oracleパラメータクエリ実行
 ORACLE接続文字列生成
 VS2005でPing
 非同期でPing
 VB6のPrinterオブジェクトを.NETで
 Reportでテーブル形式表示
 ReportViewerでパラメータ設定
 メール送信
 非同期でメール送信
 メール送信(MailMessage利用)
 シリアル通信プログラム
 シリアル通信(文字列送信)
 二重起動の禁止
 特殊フォルダ取得
 スプラッシュウインドウ表示
 テーブルへ複数行の挿入
 CSVファイルをテーブルへ挿入
 テーブルへ複数行の挿入(マッピング)
 SqlBulkCopyで郵便番号データ処理
 SQL Server接続文字列生成
 Stopwatchで時間の計測
 システムサウンド再生
 CSVファイル読み込み
 固定長テキストファイルを読む2
 TableAdapterでTransaction
[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として利用できるようになります。
 
■簡単にしか説明できないので・・・
これを参考に実際に色々と処理を実装してみて、勉強してみてくださいね。

Copyright © 2005 tadahiro higuchi. All Rights Reserved.