C#_動的に作成したコントロールの判別

前の続き。
判別するには、以下のコードを追記すればOK。

  • Control を配列に入れる
  • Control.Tag を使う。
  • object sender から Tag の値を取り出す


Control を入れた配列は ex) で使用していないが、
生成した複数の Control を取得して処理したい時は、配列に入れる必要あり。
例えば、生成した複数のテキストボックスに入力しあてる文字を
1 つのボタンを押して取得したい時など。※List はフィールドで定義。ex)コード間違えた。

 

ex)
生成ボタンを押したらそのボタン番号を表示。

    private int count = 0;

    private void buttonAdd_Click(object sender, EventArgs e)
    {
        int scrollValueY = panel1.VerticalScroll.Value;
        int scrollValueX = panel1.HorizontalScroll.Value;

        // ボタン作成
        List<Button> buttonList = new List<Button>();

        Button button = new Button();
        button.Location
            = new Point(10 - scrollValueX, 30 + (count * 40) - scrollValueY);
        button.Size = new Size(300, 19);
        button.Tag = count;
        button.Text = $"{count:D2}";
        button.Click += buttonNoShow_Click;
        panel1.Controls.Add(button);
        buttonList.Add(button);


        //Add ボタンを一番下に
        buttonAdd.Location
            = new Point(345 - scrollValueX, 30 + (count * 40) - scrollValueY);

        // スクロールバー位置設定
        int x = panel1.Width + scrollValueX;
        int y = panel1.Height + scrollValueY;
        panel1.AutoScrollPosition = new Point(x, y);

        ++count;
    }

    private void buttonNoShow_Click(object sender, EventArgs e)
    {
        var tagNum = ((Button)sender).Tag;
        MessageBox.Show($"{ tagNum }のボタンが押された");
    }

 

sender ・ e について ↓ 

XXX_Event( object sender, EventArgs e )

 

sender

sender には発生元のオブジェクトが入っている
オブジェクトは クリックした Button などのこと。
Anchor や Dock 情報など、Button のプロパティ値が入っている。

 

sender は object なので、
Button 型 など発生元のオブジェクト型に変換して扱う

var tagNum = ((Button)sender).Tag;

 

tagNumobject 型。
int として取得したいなら、int 型に変換する。

int tagNum = (int)((Button)sender).Tag;

 

e

e にはイベントの補足情報
クリックしたマウスのボタン情報やクリックした座標などが入っている。

 

 

こちらから。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1168230276
https://dobon.net/vb/dotnet/control/buttonarray.html
http://tnomura9.exblog.jp/10713631/
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1357258528

 

以上。
イベントハンドラ
イベント発生した時に呼び出される処理のこと。