检查窗体上的按钮单击事件
本文关键字:单击 事件 按钮 窗体 检查 | 更新日期: 2023-09-27 18:13:43
我现在有一个大约有13个按钮的表单。
我希望能够执行一个功能时,其中一个按钮被单击。但我试图保持有13个不同的按钮点击事件。
是否有一些方法让我能够确定何时任何按钮点击事件被触发,并能够告诉哪个按钮触发它?
谢谢!
设置一个函数来处理所有的点击事件,并使用'sender'对象的属性来识别特定的按钮
你可以有不同的按钮点击处理程序,并根据按钮的动作命名它们,你也可以有一个单一的事件处理程序,在这种情况下,参数sender
可以被转换为按钮,例如通过它的名字,找到相关的按钮。
但我提供,如果你有类似的行为在一组按钮映射到一个功能,但如果行动是不同的,使用不同的方法是更好的,但在所有13个按钮的一个形式是不好的,你可以把它们改为菜单,标签,…
foreach (Control ctl in this.Controls)
{
if (ctl is Button)
(ctl as Button).Click += MyButtonHandler;
}
protected void MyButtonHandler(object sender, EventArgs e)
{
Button clickedButton = sender as Button;
//...
}
回调函数的第一个参数是被按下的按钮
private void OnButtonClicked(object sender, EventArgs e){
Button oButton = sender as Button;
if (oButton != null){
// your logic goes here !
}
}
oButton变量是当前按钮。(重要检查oButton != null
时使用as
运算符)
在点击事件中,你得到一个对Sender的引用——这是被点击的按钮,在里面,你可以测试内容或标签,并根据值采取行动:
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show((sender as Button).Tag.ToString());
}
我认为在这种情况下使用委托是合适的。查看这些链接以获取有关实施的更多信息。
- c#工作站教程:委托和事件介绍
- c#/.NET中的委托和事件
每个适当的事件处理程序都有一个对象发送者参数。通过在属性窗口的OnClick事件中输入相同的名称,为所有13个按钮赋予相同的处理程序,例如:OnAnyButtonClicked。创建的函数将是:
private void OnAnyButtonClicked(object sender, ...)
{
// sender is the button that was clicked,
// find out which button is clicked
// call the corresponding function
}
提示:
要找出哪个按钮被按下了,可以使用Object。ReferenceEquals一个更快的方法来避免它…然后……否则如果…然后……其他的如果……是使用每个按钮的Tag属性。给每个按钮。标记一个与必须执行的操作相对应的enum值,并使用switch语句查找必须执行的操作。
你也可以传递一个委托给按钮。标签,但这几乎等同于为每个按钮创建不同的onClick事件处理程序。