checkbox.Checked dosent更新其他表格

时间:2015-11-02 21:55:03

标签: c# winforms checkbox

我有两个表单,UserInterfaceClient我正在将checkbox2.Checked信息传递给Client,但它只有在启动时才有效。当我勾选或取消勾选并关闭并重新打开Client时,它不会注意到这一变化。

Modifierscheckbox2UserInterface格式公开。

以下是Client代码:

public partial class Client : Form
{
    private UserInterface ui1;

    public Client()
    {
        InitializeComponent();
    }
    public void CheckBoxCheck()
    {
        if (ui1.checkBox2.Checked == true)
        {
            MessageBox.Show("true");
        }
        else
        {
            MessageBox.Show("false");
        }
    }
}

如果在启动时勾选复选框Client将显示“true”,但如果我点击它(取消勾选)并运行Client,它仍会显示“true”。

我需要添加或修改什么,以便checkbox2实时更新。谢谢。

注意:我对编码很新,感谢解释。

3 个答案:

答案 0 :(得分:1)

您的表格应该已连接。看起来ui1是UserInterface形式的另一个实例。

在表单之间传递数据有不同的方法,这取决于您的需求。

例如,您可以在Client中创建UserInterface表单。并使用Show()方法来显示它。

答案 1 :(得分:1)

您可能应该使用UserInterface类中的Checkbox.Checked事件,然后触发客户端可以订阅的自定义事件。

public event EventHandler<EventArgs> CheckboxCheckedChanged;
protected void OnCheckboxCheckedChanged(EventArgs e)
{
    if (CheckboxCheckedChanged != null)
        CheckboxCheckedChanged(this, e);
}

private void checkbox2_CheckedChanged(object sender, EventArgs e)
{
    OnCheckboxCheckedChanged(e);
}

然后在客户端:

ui1.CheckboxCheckedChanged += ui1_CheckboxCheckedChanged;
private void ui1_CheckboxCheckedChanged(object sender, CheckBoxEventArgs e)
{
    // Your code here
}

答案 2 :(得分:1)

我将以noMad17的答案为基础,您必须在UserInterface表单中订阅CheckBox事件。但是变化是现在我们将发送在事件中单击的CheckBox。因此,此代码适用于您的UserInterface表单:

public event EventHandler SomeEvent;
protected void OnSomeEvent(object sender, EventArgs e)
{
    EventHandler eh = SomeEvent;
    if(eh != null)
    {
        eh(sender, e);
    }
}

private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
    OnSomeEvent(sender, e);
}

现在对于Client,它需要知道UserInterface是什么,所以我们必须在构造函数中将UserInterface传递给Client,否则它不会初始化。在这里,我们将解决父窗体将给我们的CheckBox事件。最后,我们必须取消订阅该活动。所以此代码适用于您的客户:

public partial class Client : Form
{
    private UserInterface ui1;

    public Client(UserInterface ui1)
    {
        InitializeComponent();
        this.ui1 = ui1;
        ui1.SomeEvent += UI1_SomeEvent;
    }

    private void UI1_SomeEvent(object sender, EventArgs e)
    {
        //Your code...
        CheckBox c = sender as CheckBox;
        if(c.Checked == true)
        {
            MessageBox.Show("true");
        }
        else
        {
            MessageBox.Show("false");
        }
    }

    private void Client_FormClosing(object sender, FormClosingEventArgs e)
    {
        ui1.SomeEvent -= UI1_SomeEvent;
    }
}