处理表单之间的Control.Checked状态的最佳方法

自从我使用Windows Forms应用程序以来已经有一段时间了。 我在主表单上有一个复选框,并且根据某个条件,如果需要打开第二个表单以请求来自用户的其他数据,我应该如何从第二个表单传递(或获取)消息到主表单表格,所以我可以判断是否可以选中或取消选中复选框?

从我记忆中,我可以使用像Pass by 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和private setter的属性添加到子窗体,设置值在适当的时候在子表单中,然后在调用ShowDialog之后从主表单中读取值。