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

时间:2010-11-05 22:49:56

标签: c# .net winforms .net-3.5 .net-4.0

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

  1. 如何宣布控制公开?
  2. 如何将正确的事件传递到button_click?它需要两个参数 - 我如何通过它们??

5 个答案:

答案 0 :(得分:15)

为什么不在共享类中创建一个click个事件都执行的公共方法。

答案 1 :(得分:6)

可以在Form public中进行控制,但不推荐,您可以执行以下操作:

1)以第一种形式(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)在第二种形式(form2)中订阅事件

form1.ButtonFirstFormClicked += (s, e)
{
 // put your code here...
} 
祝你好运!

答案 2 :(得分:2)

您可以使用内部作为修饰符,以便轻松访问点击事件。

例如,您在form1中有一个click事件。 而不是将其设为私有,公共或受保护。把它作为内部这种方式 您可以轻松访问其他类中的方法。但internal修饰符只能在。{ 目前的包裹。

<强> 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);
}

答案 3 :(得分:1)

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

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

无论哪种方式都有效,但我同意,如果你想要遵循良好的设计,那么你应该把关注点分开,因为它与业务逻辑(代码)和表示层(即带按钮的表单)有关。

第二种形式的

//按钮

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

希望这有帮助,

享受!

答案 4 :(得分:1)

  1. 您可以通过更改表单设计器中的“Modifiers”伪属性来使控件公开。

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

  3. 但是,如Dustin Laine建议的那样,创建公共方法可能更好。