2015-11-02 3 views
0

У меня есть 2 формы, UserInterface и Client Я прохожу checkbox2.Checked info до Client, но он работает только, но он был на старте. Когда я помечаю или отключаю и закрываю и снова открываю Client, он не заметит изменения.checkbox.Checked dosent update on other forms

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 для публики. Отдых неуязвим. –

ответ

1

Я буду строить на ответ noMad17, вы должны подписаться на событие CheckBox в форме пользовательского интерфейса. Но изменение заключается в том, что теперь мы отправим CheckBox, который был нажат в случае. Так что этот код для формы пользовательского интерфейса:

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

Теперь для клиента, он должен знать, что пользовательский интерфейс так мы должны передать пользовательский интерфейс Клиенту в конструкторе, в противном случае он не будет инициализировать. Также здесь мы собираемся выработать событие 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

Возможно, вы должны использовать событие Checkbox.Checked внутри класса UserInterface, а затем запустить специальное событие, на которое может подписаться ваш клиент.

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