Как закрыть одну форму из другой формы в приложении C # Winform

0

Я работаю над приложением winform С#, в котором я хочу закрыть одну форму из другой формы, т.е. у меня есть 2 формы Form1 и Form2, и я хочу закрыть Form2 из Form1, для этого я написал следующий код для события нажатия кнопки Form1, но я получаю следующее exception-

"В экземпляре объекта не задана ссылка на объект."

private void button_click(object sender, eventArgs e)
{
     Form2.ActiveForm.Disposed+= new EventHandler(closeForm2) // Getting Exception to ***closeForm2***
}

private void closeForm2(object sender, eventArgs e)
{
      Form2.ActiveForm.Dispose();
}
Теги:
forms
winforms

4 ответа

0
 CloseProgramForm closepf = new CloseProgramForm();
            closepf.ShowDialog();
            if (closeoption == 1)
                e.Cancel = false;
            else
                e.Cancel = true;
0

Для будущих читателей!

Вы можете использовать следующий код для закрытия одной ФОРМЫ из другой ФОРМЫ в приложении С# Winform.

FrmToBeClosed obj = (FrmToBeClosed)Application.OpenForms["FrmToBeClosed"];
obj.Close();

Эти 2 строки кода не требуют пояснений!

Это!

  • 1
    Или вы можете просто Application.OpenForms["FrmToBeClosed"].Close();
0

См. MSDN → Свойство Form.ActiveForm

Если ваше приложение является приложением с несколькими документами (MDI), используйте свойство ActiveMdiChild для получения активной дочерней формы MDI.

Я думаю, вам нужна пустота в вашей MDI-форме, например

public void closeChild(Type FormType)
{
  foreach(Form form in this.MdiChildren)
  {
    if(typeof(form) == FormType)
    {
       /* what ever you wanna do */
    }
  }
}

Надеюсь, что смогу помочь :)

0

ActiveForm возвращает "Текущая активная форма из этого приложения" = Форма, которую вы нажали... Как начать свою Form2? Я думаю, вы должны определить его как

Form2 DetailsForm = null;
public void prepareForm2() //bind this to action to open new form
{
    if (DetailsForm == null)
    {
        DetailsForm = new Form2(this);
    }
}

Чем вы можете просто позвонить close()/Dispose/Hide, позвонив

private void closeForm2(object sender, eventArgs e)
{
   DetailsForm.Close();
   // or DetailsForm.Hide();
   // or DetailsForm.Dispose();
}
  • 0
    Я взял MDIParent Form и вызвал Form1 и Form2 для события ToolStripMenuItem_Click, как показано ниже - private void form1ToolStripMenuItem_Click (отправитель объекта, EventArgs e) {Form1 f = new Form1 (); f.MdiParent = this; f.Show (); } private void form2ToolStripMenuItem_Click (отправитель объекта, EventArgs e) {Form2 f = new Form2 (); f.MdiParent = this; f.Show (); }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню