2013-11-21 5 views
1

Я использую Windows Forms в C# и имею проблемы с тем, как и когда разные формы (у меня есть 2) должны закрываться, а не. Это очень раздражает, так как я чувствую, что должен уметь это исправить. Но здесь мы идем.Как обрабатывать события закрытия формы

У меня есть две формы: одна MainForm, которая вызывает другую форму, называемую ContactForm.

MainForm:

private void btnAdd_Click(object sender, EventArgs e) 
    { 
     ContactForm frmContact = new ContactForm(); 
     int index = lstCustomers.SelectedIndex; 
     //If a customer is selected, export data for the selected customer to ContactForm 
     if (index != -1) 
     { 
      frmContact.ContactData = customerMngr.GetCustomer(index).ContactData; 
     } 

     if (frmContact.ShowDialog() == DialogResult.OK) //Show the ContactForm object 
     { 
      //The user has chosen the OK button - add the new customer object 
      customerMngr.AddCustomer(frmContact.ContactData); //??  
      UpdateCustomerList(); 
     } 

     if (frmContact.ShowDialog() == DialogResult.Cancel) 
     { 
      return; 
     } 
    } 

И форма, которая называется: кнопку OK.

private void btnOK_Click(object sender, EventArgs e) 
    { 
     if (ValidateInput()) 
     { 
      this.DialogResult = DialogResult.OK; 
      this.Close(); 
     } 
    } 

Кнопка Отмена:

private void btnCancel_Click(object sender, EventArgs e) 
    { 
     if (MessageBox.Show("Do you want to cancel and discard all data?", "Cancel input", MessageBoxButtons.YesNo, 
       MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) 
     { 
      this.DialogResult = DialogResult.Cancel; 
      this.Close(); 
     } 
    } 

При нажатии на кнопку OK в ContactForm используется я хочу, чтобы закрыть, который работает. Когда я нажимаю кнопку отмены, и нет (в появившемся окне), я хочу, чтобы форма оставалась открытой, а вход все еще не поврежден. Сейчас это не работает.

Любые идеи?

/Martin

+0

Если вы сделали это правильно, DialogResult уже установлен, когда запускается действие кнопки Click. Поэтому, если он отменен, вам нужно вернуть DialogResult в None. –

+0

Спасибо, это сработало. Я должен был это видеть! – Manin

ответ

1

Ваш код в порядке. Я думаю, что проблема заключается в вашем самом Cancel Button. Под этим я подразумеваю, что вы, вероятно, привязали (по дизайну или где-то по коду) DialogResul.Cancel к вашей кнопке btnCancel.DialogResul. Чтобы исправить это, просто установите его на DialogResult.None.

Если я прав, это то, что закрывает вашу вторую форму.

Для получения дополнительной информации см. MSDN.

+0

О, ты хороший. Я приложил DialogResult к Отмене при разработке формы. Я сделал это, потому что мой учитель прямо сказал мне. Хорошо, что он знает: P Спасибо еще раз! – Manin

Смежные вопросы