2

という名前のWindowsフォームがForm1あり、このフォーム内に。という名前のパネルがありますpanel1。パネルを使用するのはボタンを配置するためだけです。これにより、ボタンをグループ化して、内の他のボタンとは別に操作できますForm1。私のプログラムの目的のために、私は内部のボタンから行われたすべてのボタンクリックを処理する必要がありますpanel1。この目的のために、私は同じコードスニペットを使用します:

  public Form1()
        {
            InitializeComponent();

            // Set a click event handler for the button in the panel
            foreach (var button in panel1.Controls.OfType<Button>())
            {

                button.Click += HandleClick;
            }
        }

私がする必要があるのは、どのボタンが正確にクリックされたかを識別する方法を持つことです。この目的のために、ハンドラーメソッドで少し遊んだ。

private void HandleClick(object o, EventArgs e)
{
    MessageBox.Show("HI" + o.ToString());
}

私はこれを手に入れましたので、それは私にいくつかの希望を与えました:

ここに画像の説明を入力してください

これは2番目の部分です-Text: button4これは実際に私の仕事を続けるのに十分な情報です。しかし、複雑な文字列操作なしでは、この情報を取得する方法を見つけることができません。それで、私がコードを書いた方法を考えれば、ボタンがクリックされたというこの情報や他の固有の情報を取得する方法はありますか?

4

3 に答える 3

4
    private void HandleClick(object sender, EventArgs e)
    {
        var btn = sender as Button;
        if (btn != null)
        {
            MessageBox.Show(btn.Text);
        }
    }
于 2013-01-30T18:37:07.053 に答える
3

1 つのオプションは、オブジェクトを にキャストするButtonことですが、キャストを行うのではなく、最初からキャストする必要がないように、イベント ハンドラーの割り当て方法を変更できます。

foreach (var button in panel1.Controls.OfType<Button>())
{
    button.Click += (_,args)=> HandleClick(button, args);
}

次に、署名を次のように変更しますHandleClick

private void HandleClick(Button button, EventArgs e);
于 2013-01-30T18:36:50.297 に答える
2

プロパティにアクセスできるようsenderに、クラスにキャストする必要があります。Button

Button b = (Button)sender;
MessageBox.Show(b.Text);
于 2013-01-30T18:36:23.467 に答える