我有一个名为Form1
的Windows表单,此表单中的面板名为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());
}
这给了我一些希望,因为我得到了这个:
这是第二部分 - Text: button4
实际上足以让我继续工作。但是,如果没有一些复杂的字符串操作,我找不到获取这条信息的方法。那么有没有办法根据我编写代码的方式点击按钮的这个或其他独特信息?
答案 0 :(得分:4)
private void HandleClick(object sender, EventArgs e)
{
var btn = sender as Button;
if (btn != null)
{
MessageBox.Show(btn.Text);
}
}
答案 1 :(得分:3)
一个选项是将对象转换为Button
,但是您可以更改事件处理程序的分配方式,而不是进行转换,这样您就不需要首先进行转换:< / p>
foreach (var button in panel1.Controls.OfType<Button>())
{
button.Click += (_,args)=> HandleClick(button, args);
}
然后只需将HandleClick
的签名更改为:
private void HandleClick(Button button, EventArgs e);
答案 2 :(得分:2)
您需要将sender
投射到Button
类,以便访问其属性:
Button b = (Button)sender;
MessageBox.Show(b.Text);