C# WinForms:从其variablename获取某个按钮
我正在用C Windows窗体编写计算器。我要听数字键并执行一个按钮。性能单击变量名中具有相同数字的按钮。我的按钮以模式命名:btn1、btn2、btn3等。 我的代码: 在代码方面,有什么比一次又一次地复制9次更好的方法吗?我试过以下方法但不起作用:C# WinForms:从其variablename获取某个按钮,c#,winforms,button,keylistener,C#,Winforms,Button,Keylistener,我正在用C Windows窗体编写计算器。我要听数字键并执行一个按钮。性能单击变量名中具有相同数字的按钮。我的按钮以模式命名:btn1、btn2、btn3等。 我的代码: 在代码方面,有什么比一次又一次地复制9次更好的方法吗?我试过以下方法但不起作用: foreach(Button btn in this.Controls){ if(btn.Text == c.ToString) //c is the KeyChar value { btn.PerformCli
foreach(Button btn in this.Controls){
if(btn.Text == c.ToString) //c is the KeyChar value
{
btn.PerformClick();
}
}
我是做错了什么,还是有更好/更流畅的方法,还是我必须这样做?你只需一行就可以得到你的按钮
Button b = this.Controls.OfType<Button>()
.FirstOrDefault(x => x.Name == "btn" + c.ToString());
if(b != null)
b.PerformClick();
这假设您的按钮名为btn1、btn2等。。我说的是Name属性,而不是您给代表按钮的变量的名称。您可以用一行代码获得按钮
Button b = this.Controls.OfType<Button>()
.FirstOrDefault(x => x.Name == "btn" + c.ToString());
if(b != null)
b.PerformClick();
这假设您的按钮名为btn1、btn2等。。我说的是Name属性,而不是您给代表按钮的变量的名称。我只需将10个按钮中的每个按钮的标记设置为其数值,并对所有10个按钮使用一个单击事件处理程序。然后在处理程序例程中,我只读取sender的标记
我建议您不要使用键盘输入来执行按钮单击。相反,您应该将键盘输入直接指向操作数变量。同样的事情也应该通过按钮的单击事件处理程序来完成。我只需将10个按钮中的每个按钮的标记设置为其数值,并对所有10个按钮使用一个单击事件处理程序。然后在处理程序例程中,我只读取sender的标记
我建议您不要使用键盘输入来执行按钮单击。相反,您应该将键盘输入直接指向操作数变量。同样的事情也应该通过按钮的单击事件处理程序来完成。使用Name属性没有错,但我个人不喜欢应用程序的属性和功能之间的这些秘密链接。相反,我将创建一个字典映射,并在InitializeComponent之后填充它
然后,您可以使用:
Button button;
if (mapping.TryGetValue(c, out button))
button.PerformClick();
使用Name属性没有错,但我个人不喜欢应用程序的属性和功能之间的这些秘密链接。相反,我将创建一个字典映射,并在InitializeComponent之后填充它
然后,您可以使用:
Button button;
if (mapping.TryGetValue(c, out button))
button.PerformClick();
每次都可以使用find控件来获取按钮,但是将已知按钮添加到按钮字典中会有更好的性能。如果重命名按钮并忘记更新代码,也不会中断 例如:
每次都可以使用find控件来获取按钮,但是将已知按钮添加到按钮字典中会有更好的性能。如果重命名按钮并忘记更新代码,也不会中断 例如:
您可能需要btn,而不是btn。这取决于它们在设计器中的命名方式。btn1是一个变量名,通常与属性名相同,但我在上面已经画了下划线。您可能想要的是btn,而不是btn。这取决于它们在设计器中的命名方式。btn1是一个变量名,通常与属性名相同,但我已经在上面的这个问题上画了下划线。非常好用,非常感谢。非常好用,非常感谢。