4

我有一个看起来像典型计算器的 win 表单 UI。自然,我不想为每个数字按钮(0-9)重写相同的逻辑。我希望能够知道单击了哪个按钮,以便可以根据它的 text 属性执行计算。我应该只创建一个接受按钮对象作为参数的方法来促进代码重用吗?有没有更好的办法?我想听听更多资深的 Win Form 应用程序开发人员将如何处理这个问题。我试图将我的逻辑排除在 UI 之外。

谢谢!

4

2 回答 2

7

事件处理程序的典型签名是void EventHandler(object sender, EventArgs e). 重要的部分是object sender. 这是触发事件的对象。在 aButton的点击事件的情况下,发送者将是那个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;
}
于 2009-01-17T20:04:39.397 回答
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
    }
}
于 2009-01-17T19:46:13.413 回答