是否可以从另一个表单触发click事件?

我需要运行另一个表单上的按钮代码。 是否可以从不同的forms做到这一点? 如果你说通过宣布公开可行,那么:

  1. 我如何宣布控制公开?
  2. 如何将正确的事件传递给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); } 
  1. 您可以通过更改窗体设计器中的“Modifiers”伪属性来使控件公开。

  2. 按钮公开后,您可以通过调用PerformClick方法运行其Click事件,例如form1.button1.PerformClick() 。 您不必直接调用事件处理程序。

然而,正如Dustin Laine所建议的那样,创建公共方法可能是一个更好的主意。

在代码为(firstForm)的表单中,您需要将该过程设置为公共,并且可以使用辅助按钮为(btnMyButton)的辅助表单。 完成此操作后,您可以将辅助按钮的单击事件处理器连接到第一个表单中的代码,如下所示。

其次如上面Dustin所述,您可以选择将此代码移动到单独的类中,然后根据需要使用尽可能多的事件引用方法处理程序。

无论哪种方式都可行,但我同意,如果你想要遵循良好的设计,你应该分离关注与业务逻辑(代码)和表示层(即带按钮的表单)的关注点

//第二种forms的按钮

 btnMyButton.Click += new EventHandler(firstForm.MethodThatHasCodeToRun); 

希望这可以帮助,

请享用!