2015-11-02 68 views
0

dosent更新我有2种形式,UserInterfaceClient我传递checkbox2.Checked信息,以Client但它仅适用但它是在发射升空。当我打勾或取消打开并关闭并重新打开Client时,它不会注意到更改。checkbox.Checked其他形式

Modifiers是在checkbox2上公开的UserInterface表格。

这里是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打勾将显示“真实的”,但如果我点击它(打钩),并运行Client它仍然会显示“真”。

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

注:我很新的编码,解释赞赏。

+0

'ui1'从哪里来? – stuartd

+0

如果您的表单最多,它会在关闭时处置,因此除非您自己这样做,否则任何更改都不会持续。这里没有足够的代码让我有更多的帮助。 – Nikki9696

+0

@ Nikki9696没有关闭,都在运行。我没有放置UserInterface代码,因为我唯一的改变是将checkbox2的Modifiers设置为public。休息是不折不扣的。 –

回答

1

我将noMad17的答案被建立,你必须订阅您的CheckBox事件的UserInterface的形式。但变化是,现在我们将发送在事件中点击的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); 
} 

现在的客户端,它需要知道的UserInterface是什么,所以我们要的UserInterface通过在构造函数中的客户端,否则将无法初始化。同样在这里,我们将制定父窗体将会给我们的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; 
    } 
} 
1

您的表格应该连接。它看起来像ui1是UserInterface窗体的一个不同的实例。

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

例如,您可以在客户端内部创建UserInterface表单。并使用Show()方法来显示它。

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 
} 
+0

我希望你不要介意,我把你的答案,并调整了一个新的答案litle。 – Huntt