Вызов события в первой форме при закрытии второй формы

#c# #forms

#c# #формы

Вопрос:

У меня есть две формы, я открываю и показываю dialog вторую форму следующим образом:

 Recieving_Stock_Form f = new Recieving_Stock_Form();
f.Username = Username;
f.Role = Role;
f.Date = monthCalendar1.SelectionStart.ToString(@"yyyy/MM/dd");
f.ShowDialog(); 
 

Теперь, когда я закрываю вторую форму, я хочу вызвать событие в первой форме
, например

 void txtStockCount_TextChanged(object sender, EventArgs e)
 

Есть какие-нибудь идеи, где я могу узнать об этом или как это сделать?

Спасибо

Ответ №1:

в Form1 предположении, что ваш код такой

 Recieving_Stock_Form f = new Recieving_Stock_Form();
 

Вы можете добавить код

 f.Form_Closing  = ExampleHandler;

ExampleHandler(object sender, FormClosingEventArgs e)
{
    //Do stuff
}
 

Комментарии:

1. Зачем регистрировать closing событие в модальной форме?

2. Потому что оно выполняется в первой форме, в отличие от второй

3. Но ShowDialog это модально, что означает, что оно будет блокировать выполнение до тех пор, пока оно не будет закрыто. Таким образом, вы всегда знаете, когда он закрыт.

4. Я не знал об этом взаимодействии, хотя оно кажется очень полезным! спасибо 🙂

Ответ №2:

Я бы предпочел не обманывать форму; вместо этого я предлагаю присвоить значение от Recieving_Stock_Form до txtStockCount :

 using (Recieving_Stock_Form f = new Recieving_Stock_Form()) {
  f.Username = Username;
  f.Role = Role;
  f.Date = monthCalendar1.SelectionStart.ToString(@"yyyy/MM/dd");

  // == DialogResult.OK - let user have a chance to cancel his/her input
  if (f.ShowDialog() == DialogResult.OK) {
    //TODO: put the right property here 
    txtStockCount.Text = f.StockCount.ToString();
  }
}
 

Ответ №3:

ShowDialog Является модальным, поэтому оно блокирует выполнение, поэтому, когда вы его закрываете, выполняется следующее.

Вы можете сделать это:

 Recieving_Stock_Form f = new Recieving_Stock_Form();
f.Username = Username;
f.Role = Role;
f.Date = monthCalendar1.SelectionStart.ToString(@"yyyy/MM/dd");
f.ShowDialog();
// it will continue here when the form is closed.
txtStockCount_TextChanged(this, EventArgs.Empty); // or assign the variable directly.
 

Комментарии:

1. Это самый быстрый и простой ответ. Спасибо 🙂

Ответ №4:

Существует два события, которые вы можете обработать — FormClosed и FormClosing , в зависимости от вашего решения.

 f.FormClosed  = f_FormClosed;

private void f_FormClosed(object sender, FormClosedEventArgs e)
{
    //Call your function or do whatever you want
}