Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@ssaattwworg

windowsformのカスタムコントロールの作り方

モチベーション

  • 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
}

(良くない)手順

これを参考にする。

  1. プロジェクトの追加・新しい項目・ユーザーコントロール(Windows フォーム)を選択する。
  2. 継承したテキストボックス.csのクラスの継承元をTextBoxクラスにする。
    継承したテキストボックス.cs
    namespace MyProject
    {
        public partial class 継承したテキストボックス : TextBox
        {
            // もとからある実装
        }
    }
    

  3. 継承したテキストボックス.Designer.csの中の
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    でエラーが発生するので、この行を削除する。
  4. private void InitializeComponent()内にイベントを追加していく。(ここではイベント処理というメソッドを追加した)
    継承したテキストボックス.Designer.cs
    private void InitializeComponent()
    {
        components = new System.ComponentModel.Container();
        this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.イベント処理);
    }
    

  5. 継承したテキストボックス.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
    }
    

  6. ビルドする。
  7. フォームのツールボックスから追加して使用できるようになる。
1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?