Я работаю над приложением 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();
}
CloseProgramForm closepf = new CloseProgramForm();
closepf.ShowDialog();
if (closeoption == 1)
e.Cancel = false;
else
e.Cancel = true;
Для будущих читателей!
Вы можете использовать следующий код для закрытия одной ФОРМЫ из другой ФОРМЫ в приложении С# Winform.
FrmToBeClosed obj = (FrmToBeClosed)Application.OpenForms["FrmToBeClosed"];
obj.Close();
Эти 2 строки кода не требуют пояснений!
Это!
Application.OpenForms["FrmToBeClosed"].Close();
См. 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 */
}
}
}
Надеюсь, что смогу помочь :)
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();
}