2

2D配列で4つのボタンを保持する小さなプログラムがあります。実行したいのは、配列の「X」座標と「Y」座標をメッセージボックスに表示することです(クリックした場合)。

動作しない方法と動作する方法をいくつか試しましたが、「X」と「Y」の値を表示できません。

下の画像は私がこれまでに持っているものを示しています: ここに画像の説明を入力してください

そしてこれは私が思いついたコードです:

namespace _2DArray
{
    public partial class Form1 : Form
    {
        private Button[,] b;
        public Form1()
        {
            InitializeComponent();
            b = new Button[2, 2];
            b = new Button[,] { {button1,button2 }, 
                                {button3, button4}};
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (Button bt in b)
            {
                bt.Click += new System.EventHandler(this.ClickedButton);
            }

        }
        private void ClickedButton(object sender, EventArgs e)
        {
            Button s = (Button)sender;
            MessageBox.Show("you have clicked button:" + s);
        }
    }
}
4

3 に答える 3

4

私が正しく読んだら、これがあなたの質問に対する答えです。ボタンのX座標とY座標を正しく取得しようとしていますか?ボタンクリックのコードは次のとおりです。

private void button2_Click(object sender, EventArgs e)
    {
        MessageBox.Show(button1.Location.ToString());
    }
于 2013-01-05T02:07:33.850 に答える
3

ボタンの座標を追跡するために、ボタンに名前を付けるなどのポインタを割り当ててみてください

 private void Form1_Load(object sender, EventArgs e)
            { 

                   for (int i = 0; i < 2; i++)
                      {
                         for (int j = 0; j < 2; j++)
                         {
                            b[i, j].Click += new System.EventHandler(this.ClickedButton);
                            b[i, j].Name =i+" "+j;
                          }
                      }
            }
    private void ClickedButton(object sender, EventArgs e)
            {

                Button s = (Button)sender;
                MessageBox.Show("you have clicked button:" + s.Name);
            }
于 2013-01-05T02:09:24.903 に答える
1

このコードを使用する

private void Form1_Load(object sender, EventArgs e) {
    for (int x = 0; x < 2; x++) {
        for (int y = 0; x < 2; y++) {
            b[x, y].Tag = new Point(x, y);
            b[x, y].Click += new System.EventHandler(this.ClickedButton);
        }
    }
}

private void ClickedButton(object sender, EventArgs e) {
    Button s = (Button) sender;
    MessageBox.Show("you have clicked button:" + s.Tag.ToString());
}

次にbutton1をクリックすると、「ボタンをクリックしました:{X = 0、Y=0}」などのメッセージが表示されます。

タグは各コントロールが持つプロパティであり、その説明は「オブジェクトに関連付けられたユーザー定義データ」であるため、任意のオブジェクトに設定できます。

私はこれがおそらく作戦に少し遅れていることを知っていますが、うまくいけばそれは他の誰かを助けるでしょう。

于 2020-06-11T18:59:20.040 に答える