【发布时间】:2015-09-15 17:04:17
【问题描述】:
我需要一些帮助来连接两个窗体。我需要的是,当在表格 2 中按下按钮时,表格 1 会激活某些方法?我尝试使用事件,但无法使其工作。
【问题讨论】:
-
在此处显示您的试用代码
-
它们是同一个项目中的两个窗体还是单独的应用程序?
-
你要触发事件吗?
我需要一些帮助来连接两个窗体。我需要的是,当在表格 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 事件处理程序中调用其他表单的方法:
表格 2 中的代码:
//You should set form1Instance=... somewhere in code
Form1 form1Instance;
public void button1_Click(object sender, EventArgs e)
{
//....
form1Instance.Method1();
}
Form1 中的代码:
Public void Method1()
{
//...
}
【讨论】:
Form2 的某个地方你有form1Instance = new Form1();。如果您对扩展答案感兴趣,请查看this post。
您可以使用 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]
【讨论】: