如何以不同的形式订阅事件
本文关键字:事件 | 更新日期: 2023-09-27 18:13:03
我需要一些帮助来连接两个windows窗体。我需要的是,当按钮按下表单2,表单1将激活某些方法?我尝试使用事件,但我不能使它工作
public class Form1
{
private Form2 form2;
public Form1(Form2 frm2)
{
form2 = frm2;
form2.ButtonClicked += button_clicked;
}
public void button_clicked(object sender, EventArgs e)
{
frm1btn_click(null, null);
}
}
public class Form2
{
public event EventHandler ButtonClicked;
Public Form2()
{
}
public void frm2btn_click(object sender, EventArgs e)
{
if(ButtonClicked != null)
{
ButtonClicked(null, null);
}
}
}
public class main
{
public static void main(string[] args)
{
Form2 form2 = new Form2();
Form1 form1 = new Form1(form2);
}
}
这是事件的基本思想。当用户单击form2中的按钮时,您的事件将被触发。确保form1正在监听事件(即+=行)。
你的main方法应该实例化这两个表单。
还要注意这不是最佳实践。表单之间很少触发事件,您很可能需要一个底层模型模式。
如果有代码的话会更完整。
与其尝试处理按钮的Click事件(你可以简单地做到这一点),不如在Click事件处理程序中调用其他表单的方法:
- 你应该有其他形式的引用来调用它的方法。
- 其他形式的方法应该是public。
代码格式2:
//You should set form1Instance=... somewhere in code
Form1 form1Instance;
public void button1_Click(object sender, EventArgs e)
{
//....
form1Instance.Method1();
}
Code In Form1:
Public void Method1()
{
//...
}
您可以使用MVVM Light的概念。MVVM Light的Messenger
组件可以方便地在类之间传递数据。
按以下步骤操作:
1)点击form2中的按钮,编写如下代码:
// Sends a message with a Student object.
var student = new Student{ FirstName = "Gul", LastName = "Ershad" };
Messenger.Default.Send(student);
2)接收来自form2到form1的传入消息,编写如下代码:
// Registers for incoming Student messages.
Messenger.Default.Register<Student>(this, (student) =>
{
// Works with the Student object.
});
阅读下面链接中的详细信息。在类之间传递消息的概念非常强大。
[MVVM Light][1]