Kil*_*oku 4 c# visual-studio-2010 windows-forms-designer
我正在开发一个程序,它有许多按钮,点击时应该执行类似的操作,但根据点击的按钮有很小的差异.问题是唯一直接的路径是为每个按钮编写代码,这将是一个非常重复的任务.有没有办法只编程一个块,可以点击任何按钮,单击哪个按钮?
Ada*_*dam 12
为所有按钮分配相同的事件处理程序.
foreach (var button in Controls.OfType<Button>()) {
button.Click += button_Click;
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以在切换到事件的属性窗口中选择相同的事件处理程序(闪存图标).
private static void button_Click(object sender, EventArgs eventArgs)
{
switch (((Button)sender).Name)
{
// find a way to disambiguate.
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以向Tag属性添加一些有用的信息以消除歧义.最后但并非最不重要的是,您可以从中派生自己的按钮Button并添加适当的属性.它们甚至会出现在属性窗口中.
通过双击其中一个按钮创建一个按钮单击处理程序.但是不要对其他按钮执行相同操作,请转到属性窗口并切换到事件视图.现在依次选择其余每个按钮,并从Click属性窗口中其他按钮事件的下拉列表中选择刚创建的单击处理程序.现在,当点击它们时,它们都会触发相同的方法.

private void button1_Click(object sender, EventArgs e)
{
var btn = (Button)sender;
switch (btn.Name) {
case "button1":
...
break;
case "button2":
...
break;
case "button3":
...
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以Tag在属性窗口中为按钮的属性定义值,并直接使用它,而无需使用switch-或if-语句.
您也可以直接测试特定按钮sender == button1,但这在switch语句中不起作用.
创建自己的按钮Button并从中添加所需的属性可能更容易.编译完成后,您的按钮将显示在"工具箱"中,您的属性可以在属性窗口中设置.
public class MyButton : Button
{
public int A { get; set; }
public int B { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
用法:
private void button1_Click(object sender, EventArgs e)
{
var btn = (MyButton)sender;
DoSomething(btn.A, btn.B);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43773 次 |
| 最近记录: |