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

时间:2012-10-19 14:17:49

标签: c# .net winforms

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

从我记忆中,我可以使用Pass by ref之类的东西。或者有更好的方法来实现这一目标吗?

2 个答案:

答案 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);
}

希望这有帮助