自从我使用Windows Forms应用程序以来已经有一段时间了。我在主窗体上有一个复选框,并且根据一定的条件,如果需要打开第二个窗体来向用户请求额外的数据,我应该如何从第二个窗体向主窗体传递(或取回)消息窗体,所以我可以判断是否可以选中或取消选中复选框?处理表单之间传递Control.Checked状态的最佳方法
从我记事起,我可以ref
使用像通行证。还是有更好的方法来完成这个?
自从我使用Windows Forms应用程序以来已经有一段时间了。我在主窗体上有一个复选框,并且根据一定的条件,如果需要打开第二个窗体来向用户请求额外的数据,我应该如何从第二个窗体向主窗体传递(或取回)消息窗体,所以我可以判断是否可以选中或取消选中复选框?处理表单之间传递Control.Checked状态的最佳方法
从我记事起,我可以ref
使用像通行证。还是有更好的方法来完成这个?
这样做的一种方法是使用事件。
在你的孩子的形式,宣布一个事件,在特定的用户交互得到提升,并简单地“订阅”此事件在您的主要形式。
当你实例,并打电话给你的孩子的形式,你会做这样的:
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.MyEvent += frm_MyEvent;
frm.ShowDialog();
frm.MyEvent -= frm_MyEvent;
}
private void frm_MyEvent(object sender, EventArgs e)
{
textBox1.Text = "whatever"; //just for demo purposes
}
在你的孩子的形式,声明该事件并提高它:
public event EventHandler MyEvent;
private void button1_Click(object sender, EventArgs e)
{
if (MyEvent!= null)
MyEvent(this, EventArgs.Empty);
}
希望这有助于
因为你是显示子窗体作为一个对话框,并且父窗体并不需要它,直到形式关闭,所有你需要做的就是添加一个属性与公共getter和setter方法私有的子窗体,在适当时在子窗体中设置值,然后在调用ShowDialog
之后从主窗体读取值。
非常感谢@Servy。 – Arrow
我不确定我是否理解你的情况,但我不认为通过ref是在这里的解决方案。首先打开什么样的表单?一种是另一种的父母吗?你想什么时候通过这个价值? – Otiel
你检查了[那些](http://stackoverflow.com/search?q= [c%23] + pass + data +之间的+表单)? – Otiel
你可能想看看Form.ShowDialog方法(在这里看到的例子:http://msdn.microsoft.com/en-us/library/c7ykbedk%28v=vs.100%29.aspx) – RobH