我目前有一张表格上有大约13个按钮。
我希望能够在单击其中一个按钮时执行功能。但我试图避免有13个不同的按钮点击事件。
我有什么方法可以确定何时触发任何按钮点击事件,并且能够告诉哪个按钮触发它?
谢谢!
答案 0 :(得分:4)
有一个处理所有点击事件的功能,并使用'sender'对象的属性来识别特定按钮。
答案 1 :(得分:2)
您可以使用不同的按钮单击处理程序,并根据按钮操作对其进行命名,也可以为所有这些操作符设置单个事件处理程序,在这种情况下,参数sender
可以转换为按钮,例如通过它名称,找到相关按钮。
但是我提供如果你在按钮组上有类似的行为将它们映射到单个函数,但如果使用不同的方法操作不同则更好,但是在所有一个带有13个按钮的表单中都不好,你可以将它们更改为菜单,标签,...
答案 2 :(得分:1)
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;
//...
}
答案 3 :(得分:0)
回调函数的第一个参数是按下的按钮。
答案 4 :(得分:0)
private void OnButtonClicked(object sender, EventArgs e){
Button oButton = sender as Button;
if (oButton != null){
// your logic goes here !
}
}
oButton变量是您当前的按钮。 (重要,以便在使用oButton != null
运算符时检查as
是否
答案 5 :(得分:0)
在点击事件中,您获得对发件人的引用 - 这是单击按钮,因此您可以测试内容或标记并根据值进行操作:
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show((sender as Button).Tag.ToString());
}
答案 6 :(得分:0)
我认为在这种情况下使用代表是正确的。请查看这些链接以获取有关实施的更多信息。
答案 7 :(得分:0)
每个正确的eventhandler都有一个Object sender参数。通过在“属性”窗口的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 一种更快的方法来避免如果......那么......如果......那么......其他如果...... 正在使用每个Button的Tag属性。 给每个Button.Tag一个与必须执行的操作相对应的枚举值,并使用switch语句来找出必须完成的操作。
您也可以将一个代表分配给button.Tag,但这与为每个按钮创建不同的onClick事件处理程序几乎相同。