3

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

AC# .Net 计算器 - 设计阶段

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

1
(来源:homeandlearn.co.uk

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

如何解决这个问题。

4

3 回答 3

9

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

private void btnAnyButton_Click(object sender, EventArgs e)
{
    Button theButton = sender as Button;
    txtDisplay.Text += theButton.Text;
}
于 2012-06-21T17:33:33.203 回答
6

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

在此处输入图像描述

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

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

我希望这会有所帮助。

于 2012-06-21T17:41:54.330 回答
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 更干净。

于 2012-06-21T17:32:33.937 回答