1

我已经Windows Form命名了 -Form1在里面Form1我有一个名为panel1. 我使用这个面板只是为了添加buttons他。目前正好有 9 个buttons,但如果这与我当前的问题有关,我打算动态更改它们的数量。我需要的是检测何时单击此面板中的按钮的方法(我也有其他按钮,但它们位于Form1面板外部)并且还确切知道单击了哪个按钮。我试过这个:

private void panel1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("HI" + sender);
        }

正如你所看到的,它并不多,但足以看出我不能使用pnael1's_clickevent. 使用此代码,当我单击面板中除按钮之外的任何位置时,我会收到消息框。那我该怎么做。是否可以从内部进行操作,panel1或者我应该使用另一种方法对这些按钮进行分组,但重要的是能够保持现在在其中panel1的按钮与我可能(实际上我确实拥有)的其他按钮之间的区别?

4

2 回答 2

4

创建动态按钮时,您注册该按钮实例的Click事件并附加到事件处理程序(单个处理程序可以处理所有按钮的单击事件):

var dynamicButton1 = new Button();
dynamicButton1.Click += MyButtonClickHandler;

只要MyButtonClickHandler有一个适合Click事件的签名(即任何返回void和接受 anobject和 an的方法EventArgs,只要按钮实例存在,处理程序就应该响应动态按钮的点击事件。

于 2013-01-30T17:08:50.230 回答
2

只要您不随时间动态添加控件,并且在表单初始化后按钮的数量是固定的,您就可以使用它为面板中的所有按钮添加点击事件处理程序:

foreach (var button in panel.Controls.OfType<Button>())
{
    button.Click += HandleClick;
}
于 2013-01-30T16:57:48.437 回答