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

C#具有类似行为的多个按钮,c#,C#,我是C#新手,目前正在学习这篇C#教程。在本教程中,我遇到了开发计算器的练习 在练习中给出的解决方案中,每个数字按钮都有一个btn*_click方法,该方法很容易推广 (来源:) 我们如何编写代码,以便能够概括这10个函数?我认为可以通过修改initializeComponent()来完成,但有关它的评论说不应该使用代码编辑器来修改它 如何解决这个问题。您可以从代码中动态生成这些按钮,并在标记属性中为它们分配一些值。从那里,您可以将它们都连接到同一个事件处理程序(我们讨论的是数字按钮,如0,

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

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


(来源:)

我们如何编写代码,以便能够概括这10个函数?我认为可以通过修改initializeComponent()来完成,但有关它的评论说不应该使用代码编辑器来修改它


如何解决这个问题。

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

伪代码:

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

标记
属性不是必需的,但我发现它比获取按钮文本并转换为int更干净。

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

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

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

然后看起来你可以重构如下:

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

我希望这会有所帮助。

以后您应该复制粘贴代码,而不是使用图像。如果您在所有代码前面缩进4个空格(或一个制表符)(或单击编辑器中的
{}
按钮,执行相同的操作),它将自动格式化。@mellamokb-这是一个从站点链接的图像,带有代码的gif。@afuzzyllama:Ah,k,这是有道理的:)@Nathan还讨论了如何将所有按钮链接到同一个事件处理程序,您可能会发现这很有帮助。您和@Nathan给出的答案向我解释了这一点。谢谢!