是否可以从另一个表单触发click事件?
我需要运行另一个表单上的按钮代码。 是否可以从不同的forms做到这一点? 如果你说通过宣布公开可行,那么:
- 我如何宣布控制公开?
- 如何将正确的事件传递给
button_click
? 它需要两个参数 – 我如何通过它们?
可以在Form
public
控制,但不推荐,您可以执行以下操作:
1)以第一种forms(form1)ButtonFirstFormClicked声明一个新事件
public event EventHandler ButtonFirstFormClicked;
并在Button.Click事件处理程序中触发此事件
void button_Clicked(object sender, EventArgs e) { // if you're working with c# 6.0 or greater ButtonFirstFormClicked?.Invoke(sender, e); // if you're not then comment the above method and uncomment the below //if (ButtonFirstFormClicked!= null) // ButtonFirstFormClicked(sender, e); }
2)在第二种forms(form2)中订阅事件
form1.ButtonFirstFormClicked += (s, e) { // put your code here... }
祝好运!
为什么不在共享类中创建一个click
事件执行的公共方法。
您可以使用internal作为修饰符,以便轻松访问click事件。
例如,您在form1中有一个click事件。 而不是将其设为私有,公共或受保护。 把它作为内部这种方式你可以轻松访问其他类中的方法。 但内部修饰符只能在当前包中访问。
Form1中
internal passobj; internal passeargs; internal void button1_Click(object obj, EventArgs e) { this.passobj = obj; this.passeargs = e; MessageBox.Show("Clicked!") }
窗体2
private void button1_Click(object obj, EventArgs e) { Form1 f1 = new Form1(); f1.button1_Click(f1.passobj, f1.passeargs); }
-
您可以通过更改窗体设计器中的“Modifiers”伪属性来使控件公开。
-
按钮公开后,您可以通过调用
PerformClick
方法运行其Click
事件,例如form1.button1.PerformClick()
。 您不必直接调用事件处理程序。
然而,正如Dustin Laine所建议的那样,创建公共方法可能是一个更好的主意。
在代码为(firstForm)的表单中,您需要将该过程设置为公共,并且可以使用辅助按钮为(btnMyButton)的辅助表单。 完成此操作后,您可以将辅助按钮的单击事件处理器连接到第一个表单中的代码,如下所示。
其次如上面Dustin所述,您可以选择将此代码移动到单独的类中,然后根据需要使用尽可能多的事件引用方法处理程序。
无论哪种方式都可行,但我同意,如果你想要遵循良好的设计,你应该分离关注与业务逻辑(代码)和表示层(即带按钮的表单)的关注点
//第二种forms的按钮
btnMyButton.Click += new EventHandler(firstForm.MethodThatHasCodeToRun);
希望这可以帮助,
请享用!
- WCF和数据契约接口
- 使用INotifyPropertyChanged绑定到Silverlight中的字典
- 从另一张FORM中取回隐藏的FORM
- 如何通过将dll导入引用来为Winforms的C#.net工具箱添加用户控件?
- 如何查找原因和SocketException,并显示已建立的连接被主机中的软件中止的消息?
- 尝试访问WCF服务时出现最新的MonoTouch 4.0问题
- 当焦点在WindowsFormsHost中时,为什么Keyboard.FocusedElement为null? 它打破了WPF命令路由
- 如何在.Net 3.5框架中实现安全协议TLS 1.2
- 用于C#/ .NET API的向后兼容性的工具?