cloud_garcia Ответов: 4

Как закрыть две формы одновременно? Форма Окна C#?


Как закрыть две формы одновременно? Форма Окна C#?
у меня открыто 3 формы. но я хочу закрыть только 2, я попробовал использовать сначала я называю 2-ю форму, которую я хочу закрыть

form1 f = new form1(); //this will call the 2nd form
this.close(); //this will close the current form
f.show(); //this will show the 2nd form
f.close(); //this will close the 2nd form


но 2-я форма, которую я хотел закрыть, все еще открыта.

4 Ответов

Рейтинг:
2

Member 14900177

в случае, если вы используете вложенную форму (Форма внутри формы), например login form в Form1, мы можем передать объект Form1 конструктору формы loginpage следующим образом,
файл: Form1.cs
частная iconButton1_Click недействительным(объект отправителя, EventArgs в электронной)
{
OpenChildForm(new loginpage(this));
}


private void OpenChildForm(форма ChildForm)//ссылка на rjcode
{
if(CurrentChildForm != null)
{
CurrentChildForm.Close();
}
CurrentChildForm = Дочерняя Форма;
CurrentChildForm.Топлевел = ложь;
CurrentChildForm.Formborderstyle Значение = Formborderstyle Значение.Никто;
CurrentChildForm.Док = DockStyle.Заполнить;
панель управления 2.Добавить(CurrentChildForm);
panel2.Tag = CurrentChildForm;
CurrentChildForm.BringToFront();
CurrentChildForm.Показать();
}

файл: loginpage.cs
Форма 1 основная форма;
общественные loginpage(Форма 1 основная)
{
метод InitializeComponent();
mainform = главная;
}
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
MainPage nextForm = новая главная страница();
главная форма.Скрыть();
nextForm.Метод showdialog();
главная форма.Закрывать();

}


Richard MacCutchan

Это было решено восемь лет назад.

Member 14900177

это происходит в случае вложенных форм, и закрытие вложенной формы не закрывает основную форму(Form1.cs), так как объект формы не передается. мы решаем задачу передачи объекта формы во вложенную форму через конструктор

Рейтинг:
0

N_tro_P

Вам нужно закрыть эту форму от самой себя или объекта, который имеет к ней доступ.

Какой предмет открыл эти формы? Он может прослушать нужное вам событие и закрыть все необходимые формы.

напр.

partial class Form1 : Form
{
   Form2 _form2;
   Form3 _form3;
   private void MakeForms()
   {
      _form2 = new Form2();
      _form2.SomeEvent += HandleSomeEvent;

      _form3 = new Form3();
   }

   private void HandleSomeEvent(object sender, EventArgs args)
   (
      _form2.Close();
      _form3.Close();
   )
}

...
//Other file
partial class Form2 : Form
{
   public event EventHandler SomeEvent;

   //Call this method when you want to close the forms
   private void RaiseSomeEvent()
   {
      var handler = SomeEvent;
      if(SomeEvent != null)
          SomeEvent(this, EventArgs.Empty);
   }
}
...
//Other File
partial class Form3 : Form
{
}


cloud_garcia

не могли бы вы привести еще один пример ... мне это очень нужно..

[no name]

Хммм. Не знаю, насколько яснее это может быть. Не знаю, какую часть вы не получаете. Здесь есть все, что вам нужно.

Rahul Rajat Singh

+5.

Рейтинг:
0

Kschuler

Какое событие вызывает закрытие двух окон?

This.Close() закроется только та форма, на которой написан код. Вот что значит "эта" его часть. Поэтому, если у вас есть кнопка на Form3 с именем btnExecute и вы хотите, чтобы она закрыла Form1 и Form2, вам придется сделать что-то вроде этого: vb.net, но вы должны легко быть в состоянии преобразовать его)

Private Sub btnExecute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExecute.Click
    Form1.Close()
    Form2.Close()
End Sub



ОБНОВЛЕНИЕ - Это действительно легко переключиться с VB.Net to C#.... вот C#:
private void btnExecute_Click(object sender, System.EventArgs e)
{
   Form1.Close();
   Form2.Close();
}


[no name]

Поскольку был использован тег "C#", вы действительно должны привести свой пример в "C#"

Kschuler

Я не хотел брать на себя всю работу по этой операции. :)

cloud_garcia

можете ли вы привести пример кода c#? пожалуйста

Kschuler

Я обновил свое решение.

Рейтинг:
0

kuldeepkumartak

когда вы показываете свою страницу, когда делаете объект, то
форма f1=новая форма();
это.скрыть();
Ф1.метод showdialog();
это.рядом();
я думаю, что это полезно для вас


cloud_garcia

я уже пробовал это сделать, но 2-й класс все еще открыт