我有一个看似典型计算器的win表单UI。当然,我不想为每个数字按钮(0-9)重写相同的逻辑。我希望能够知道单击了哪个按钮,因此我可以根据它的文本属性执行计算。我应该只创建一个接受按钮对象作为参数的方法来促进代码重用吗?有没有更好的办法?我想听听Win Form应用程序开发人员如何处理这个问题。我试图让我的逻辑脱离用户界面。
谢谢!
答案 0 :(得分:7)
事件处理程序的典型签名是void EventHandler(object sender, EventArgs e)
。其中重要的部分是object sender
。这是触发事件的对象。对于Button
点击事件,发件人将是Button
。
void digitButton_Click(object sender, EventArgs e)
{
Button ButtonThatWasPushed = (Button)sender;
string ButtonText = ButtonThatWasPushed.Text; //the button's Text
//do something
//If you store the button's numeric value in it's Tag property
//things become even easier.
int ButtonValue = (int)ButtonThatWasPushed.Tag;
}
答案 1 :(得分:3)
指定事件处理程序时,您可以注册相同的函数来处理多个事件(如果在VS.Net中,转到属性,选择事件部分(闪电按钮),单击下拉列表进行单击)。这样,您将编写一个事件处理函数来处理所有按钮。
示例(C#)如果在代码中完成按钮创建和事件注册:
public void digitButtons_Click(object sender, EventArgs eventArgs) {
if(sender is Button) {
string digit = (sender as Button).Text;
// TODO: do magic
}
}
public void createButtons() {
for(int i = 0; i < 10; i++) {
Button button = new Button();
button.Text = i.ToString();
button.Click += digitButtons_Click;
// TODO: add button to Form
}
}