我是 C# 新手,目前正在关注这个 C# 教程。在本教程中,我遇到了开发计算器的练习。
在练习中给出的解决方案中,每个数字按钮都有一个 btn*_click 方法,可以很容易地推广。
(来源:homeandlearn.co.uk)
我们如何编写代码,以便我们可以概括这 10 个功能?我虽然可以通过修改 initializeComponent() 来完成,但是关于它的评论说它不应该使用代码编辑器进行修改。
如何解决这个问题。
我是 C# 新手,目前正在关注这个 C# 教程。在本教程中,我遇到了开发计算器的练习。
在练习中给出的解决方案中,每个数字按钮都有一个 btn*_click 方法,可以很容易地推广。
(来源:homeandlearn.co.uk)
我们如何编写代码,以便我们可以概括这 10 个功能?我虽然可以通过修改 initializeComponent() 来完成,但是关于它的评论说它不应该使用代码编辑器进行修改。
如何解决这个问题。
您可以将所有按钮绑定到同一个单击事件处理程序,并用于sender
获取文本:
private void btnAnyButton_Click(object sender, EventArgs e)
{
Button theButton = sender as Button;
txtDisplay.Text += theButton.Text;
}
您发布的教程是在视觉工作室中使用视觉编辑器。默认情况下,设计器将使用约定 {controlname}_{eventname} 生成代码,您可以在属性窗口中显式分配不同的事件名称,并且所有按钮可以共享相同的事件方法。
然后看起来你可以像这样重构:
private void btn_click(object sender, EventArgs e)
{
Button btn = sender as Button;
if(btn != null)
txtDisplay.Text += btn.Text;
}
我希望这会有所帮助。
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 更干净。