このサイトの記事では、あるコントロールから派生したクラスを作成して、基のコントロールの代わりに使用するように要求している場合があります。例えば、「コントロールで矢印、Tab、Enter、Escキーが押されたことを知る」ではButtonから派生したクラスを、「DataGridViewでEnterキーを押すと隣のセルにフォーカスが移動されるようにする」ではDataGridViewから派生したクラスを、「DataGrid内の指定された行までスクロールする」ではDataGridから派生したクラスを、基のコントロールの代わりに使用することを求めています。
ここでは、「コントロールで矢印、Tab、Enter、Escキーが押されたことを知る」で作成したButtonから派生したButtonExクラスを例に、あるコントロールから派生したクラスを基のコントロールの代わりに使用する具体的な方法を説明します。
Visual Studio 2003以前では、以下のような方法でButtonExクラスをプロジェクトに追加すると、Visual StudioのツールボックスにButtonExコントロールを表示することができます。ツールボックスに表示されたButtonExコントロールは、普通のButtonコントロールのようにフォームデザイナで使用することができます。
上記のユーザーコントロールを追加する方法は、Visual Studio 2005以降でも使えます。しかしVisual Studio 2005以降では、ButtonExクラスをどこに記述してもツールボックスに表示されます。通常は、新しいクラスを作成して、そこに記述します。
注意:もし上記の方法でツールボックスにButtonExが表示されない場合は、メニューの「ツール」-「オプション」でオプションダイアログを表示してから、「Windowsフォームデザイナー」という項目にある「ツールボックスを自動取得する」という設定をTrueにしてから再度お試しください。もしこの項目がすでにTrueになっているか、Falseのままにしておきたいという場合は、メニューの「プロジェクト」-「プロジェクトツールボックスアイテムを最新の情報に更新」を選択してください。
他のプロジェクトでもButtonExコントロールを使用するならば、DLLを作成するとよいでしょう。以下にその手順を示します。
すでにフォームに配置されたButtonをButtonExに置き換えるには、コードを直接書き換えます。ただしこの方法はフォームデザイナが管理し、「コードエディタで変更しないでください」とさせている部分を変更するため、それなりに危険だということをご了承ください。
Partial Class Form1 Inherits System.Windows.Forms.Form Private Sub InitializeComponent() '(省略....) 'Me.Button1 = New System.Windows.Forms.Button Me.Button1 = New ButtonEx '(省略....) End Sub '(省略....) 'Friend WithEvents Button1 As System.Windows.Forms.Button Friend WithEvents Button1 As ButtonEx '(省略....) End Class
namespace Project1 { partial class Form1 { private void InitializeComponent() { //(省略...) //this.Button1 = new System.Windows.Forms.Button(); this.Button1 = new ButtonEx(); //(省略...) } //(省略...) //private System.Windows.Forms.Button Button1; private ButtonEx Button1; //(省略...) } }
動的にコントロールを追加する方法を知っている方には、説明の必要はないでしょう。通常のButtonコントロールと同じように、ButtonExを使用できます。
動的にコントロールを追加する方法は、こちらで説明しています。