C#多重按钮具有类似的行为

时间:2012-06-21 17:30:10

标签: c#

我是C#的新手,我现在正在关注这个C#教程。在本教程中,我遇到了开发计算器的练习。

http://www.homeandlearn.co.uk/csharp/csharp_s2p15.html

在练习中给出的解决方案中,每个数字按钮都有一个btn * _click方法,可以很容易地推广。

1 http://www.homeandlearn.co.uk/csharp/images/calculator/buttonCode_Numbers.gif

我们如何编写代码,以便我们可以概括这10个函数?我虽然可以通过修改initializeComponent()来完成,但是对它的评论说它不应该使用代码编辑器进行修改。

如何解决这个问题。

3 个答案:

答案 0 :(得分:9)

您可以将所有按钮绑定到同一个点击事件处理程序,并使用sender来获取文本:

private void btnAnyButton_Click(object sender, EventArgs e)
{
    Button theButton = sender as Button;
    txtDisplay.Text += theButton.Text;
}

答案 1 :(得分:6)

您发布的教程是使用可视工作室中的可视化编辑器。默认情况下,设计人员将生成具有约定{controlname} _ {eventname}的代码,您可以在属性窗口中显式指定不同的事件名称,并且所有按钮可以共享相同的事件方法。

enter image description here

然后看起来你可以重构这个:

private void btn_click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    if(btn != null)
       txtDisplay.Text += btn.Text;
}

我希望有所帮助。

答案 2 :(得分:1)

您可以从代码动态生成这些按钮,并在tag属性中为它们分配一些值。从那里,你可以将它们挂钩到同一个事件处理程序(我们正在讨论数字按钮,如0,1,2,3,4 ......)。在onClick事件处理程序中,您将获得调用者的tag值并执行您必须执行的操作。

伪代码:

void onClick(Button caller){
  int btnNb = (int) caller.Tag;
  //do what you have to do
}

tag属性不是必需但我发现它比获取按钮文本并转换为int更清晰。