0


Visual Studio 2010 のデザイナー モードで TableLayoutPanel (たとえば、8x8 行 x 列) を作成し、この「マトリックス」の各フィールドにボタンを配置しました。イベントを一元的に処理する方法はありますか? TableLayoutPanel に TabIndexChanged があることがわかりましたが、これが役立つかどうかはわかりません。
これが可能かどうかを調べようとしてい
ます.2番目のボタンをクリックして、クリックしたボタンに関する情報を取得し、アイコンやテキストなどのプロパティの一部を変更できるようにします。
tablelayoutpanel を「マトリックス」または「配列」として理解し、次のように操作したいという考えを想像してみましょう。

1)I'll click on button on possition i (or i,j)
2)I'll change the Icon of button on possition i (or i,j)

それは可能ですか?はいの場合、どのように?
どうも

4

2 に答える 2

1

1 つのメソッドですべてのボタン クリック イベントを処理し、sender パラメータを使用してボタンの画像を変更できます。

例えば

private void CreateButtons(object sender, EventArgs e)
    {
        for (int i = 0; 8 < length; i++)
        {

            for (int j = 0; 8 < length; i++)
            {
                var btn = new Button() { Text = "Something" };
                btn.Click += new EventHandler(btn_Click);
                this.tableLayoutPanel1.Controls.Add(btn, i, j);
            }
        }

    }

    void btn_Click(object sender, EventArgs e)
    {
         ((Button)sender).Image= SomeMethodThatReturnsAnImage();
    }

余談TabIndexChangedですが、コントロールの TabIndex プロパティが変更されたときにのみ発生するため、これはまったく役に立ちません。これは通常非常にまれです。TabIndex プロパティは、ユーザーが Tabキーを押したときのコントロールの順序を制御するために使用されることを思い出してください。

于 2012-04-22T01:27:22.120 に答える
0

すべてのボタンのクリック イベントを 1 つのイベント ハンドラーに関連付けてから、イベント ハンドラー内でクリックされたボタンなどを操作するだけでよいようです。

于 2012-04-21T22:17:04.233 に答える