自从我使用Windows Forms应用程序以来已经有一段时间了。我在主表单上有一个复选框,并且根据某个条件,如果需要打开第二个表单以请求来自用户的其他数据,我应该如何从第二个表单传递(或获取)消息到主表单表格,以便我可以判断是否可以选中或取消选中复选框?
从我记忆中,我可以使用Pass by ref
之类的东西。或者有更好的方法来实现这一目标吗?
答案 0 :(得分:3)
由于您将子窗体显示为对话框,并且父窗体在窗体关闭之前不需要它,因此您只需要将一个带有公共getter和private setter的属性添加到子窗体,只要合适的话,在子表单中设置值,然后在调用ShowDialog
后从主表单中读取值。
答案 1 :(得分:1)
执行此操作的一种方法是使用事件。
在您的子表单中,声明要在特定用户交互时引发的事件,并在主表单中“订阅”此事件。
当您实例化并称呼您为子表格时,您会这样做:
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);
}
希望这有帮助