我是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()来完成,但是对它的评论说它不应该使用代码编辑器进行修改。
如何解决这个问题。
答案 0 :(得分:9)
您可以将所有按钮绑定到同一个点击事件处理程序,并使用sender
来获取文本:
private void btnAnyButton_Click(object sender, EventArgs e)
{
Button theButton = sender as Button;
txtDisplay.Text += theButton.Text;
}
答案 1 :(得分:6)
您发布的教程是使用可视工作室中的可视化编辑器。默认情况下,设计人员将生成具有约定{controlname} _ {eventname}的代码,您可以在属性窗口中显式指定不同的事件名称,并且所有按钮可以共享相同的事件方法。
然后看起来你可以重构这个:
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更清晰。