VisualStudio コントロールのカスタマイズ「DataGridView」

2013/09/17

コントロールをカスタマイズする方法

概要

当記事では、VisualStudioのコントロールを自分好みにカスタマイズする方法を紹介します。
難しく思うかもしれませんが、普通のクラスと変わりありません。

  1. 変更したいコントロールを継承してクラスを作成。
  2. 変更するメソッドをオーバーライドしてプログラムを追記。
  3. 作成したコンポーネントを使用。

VisualStudioでGUI操作に慣れていると忘れてしまいがちですが、すべてプログラムで作られているためコントロールの変更も普通にできちゃうんです。

コントロールとは?

デザイン作成時に、ツールボックスを使用していると思います。
TextBox、Label、DataGridViewなどです。
このツールボックスに存在しているものを今回ではコントロールと呼んでいます。

これらにあるものは、全てカスタマイズが可能です。

DataGridViewをカスタマイズ

基本的な使い方は下記となります。
DataGridViewの使い方

今回の例では、Enterキーが押されたときに、Tabキーと同じ動作をするようカスタマイズしています。

まず、クラスを追加します。
今回の例では「DataGridViewEx.vb」という名前で保存しています。
クラス追加

追加したクラスのコードを以下のようにします。


Imports System
Imports System.Windows.Forms

''' <summary>
''' Enterキーが押された時に、Tabキーが押されたのと同じ動作をする
''' (現在のセルを隣のセルに移動する)DataGridView
''' </summary>
Public Class DataGridViewEx
    Inherits DataGridView

    <System.Security.Permissions.UIPermission( _
        System.Security.Permissions.SecurityAction.LinkDemand, _
        Window:=System.Security.Permissions.UIPermissionWindow.AllWindows)> _
    Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
        If (keyData And Keys.KeyCode) = Keys.Enter Then
            Return Me.ProcessTabKey(keyData)
        End If
        Return MyBase.ProcessDialogKey(keyData)
    End Function

    <System.Security.Permissions.SecurityPermission( _
        System.Security.Permissions.SecurityAction.LinkDemand, _
        Flags:=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)> _
    Protected Overrides Function ProcessDataGridViewKey(ByVal e As KeyEventArgs) As Boolean
        If e.KeyCode = Keys.Enter Then
            Return Me.ProcessTabKey(e.KeyCode)
        End If
        Return MyBase.ProcessDataGridViewKey(e)
    End Function
End Class

[ツールボックス]のコンポーネントに、先ほど作ったDataGridViewExが追加されています。
通常のコントロールと同様に使用することができるので、ドラッグして配置してご使用ください。

Related

Vagrant+Docker+PHP環境で「session.save_path」指定時に、セッションファイルが空になるエラー

ファイル共有でのフォルダの所有者を設定 結論 PHP5.4.28 からセッションファイルのownerはrootもしくはWebサーバのユーザに限るという制限が...

LINEと連携したテイクアウト事前注文システム徹底比較!

目次 テイクアウト予約・注文受付システムのトレンド LINEと連携したテイクアウト事前注文システムの価格表 L.B.B.Cloud テイクイーツ ...

PHPで動画の撮影日を取得

PHPで動画の撮影日を取得 概要 PHPからffprobeコマンドを実行し、動画の撮影日時を取得します。 コード $posted_at = ...

FullCalendarでGoogleカレンダーのようなUIを実装

jQueryプラグインFullCalendarのサンプル 概要 FullCalendarを使用して、GoogleカレンダーのようなUIを実装する使用例を...

PHP Laravel5.2でmulti-auth(複数テーブルでの認証)を実装

Laravel5.2でマルチ認証 概要 LaravelとはPHPの中で今最も伸びているフレームワークです。 処理速度が遅いなどありますが、かなり使い安く拡...

PHP 正規表現でIPアドレス形式の文字列か判定

正規表現でIPアドレスの入力チェック 概要 フォームで入力されたIPアドレスが正当な文字列か判定するためのバリデーション処理を実装します。 基本的...
トップへ戻る