我需要运行另一个表单上的按钮代码。是否可以从不同的形式做到这一点?如果你说通过宣布它可以公开,那么:
button_click
?它需要两个参数 - 我如何通过它们??答案 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)
您可以通过更改表单设计器中的“Modifiers”伪属性来使控件公开。
按钮公开后,您可以通过调用Click
方法运行其PerformClick
事件,例如form1.button1.PerformClick()
。您不必直接调用事件处理程序。
但是,如Dustin Laine建议的那样,创建公共方法可能更好。