モチベーション
- TextBoxクラスを継承してイベントの処理を追加する。
- TextBoxクラスのプロパティを追加する。
より良い手順
- @userisgodさんに教えてもらった手法
- テキストボックスのクラスを継承する
継承したテキストボックス.cs
public class 継承したテキストボックス : TextBox
{
private 選択肢クラス 選択肢 = 選択肢クラス.選択肢1;
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
// Do something(イベント処理)
}
[Browsable(true)]
[Description("プロパティの説明")]
[Category("プロパティの中のカテゴリ")]
public 選択肢クラス プロパティ名
{
get { return 選択肢; }
set { 選択肢 = value; }
}
}
public enum 選択肢クラス
{
選択肢1 = 1,
選択肢2 = 2
}
(良くない)手順
これを参考にする。
- プロジェクトの追加・新しい項目・ユーザーコントロール(Windows フォーム)を選択する。
- 継承したテキストボックス.csのクラスの継承元をTextBoxクラスにする。
継承したテキストボックス.cs
namespace MyProject { public partial class 継承したテキストボックス : TextBox { // もとからある実装 } }
- 継承したテキストボックス.Designer.csの中の ```this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;``` でエラーが発生するので、この行を削除する。
- ```private void InitializeComponent()```内にイベントを追加していく。(ここではイベント処理というメソッドを追加した)
継承したテキストボックス.Designer.cs
private void InitializeComponent() { components = new System.ComponentModel.Container(); this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.イベント処理); }
- 継承したテキストボックス.csの中に追加したイベント処理の実装を書く
プロパティも継承したテキストボックスクラスに実装する。
プロパティの選択肢はenumのクラスを作成する。
すると、デザイナーのツールボックス内でenumクラスのメンバーが選択できるようになる。
継承したテキストボックス.cs
public partial class 継承したテキストボックス : TextBox { private void イベント処理(object sender, KeyPressEventArgs e) { // Do something } private 選択肢クラス 選択肢 = 選択肢クラス.選択肢1; [Browsable(true)] [Description("プロパティの説明")] [Category("プロパティの中のカテゴリ")] public 選択肢クラス プロパティ名 { get { return 選択肢; } set { 選択肢 = value; } } } public enum 選択肢クラス { 選択肢1 = 1, 選択肢2 = 2 }
- ビルドする。
- フォームのツールボックスから追加して使用できるようになる。