Как переключать формы в C # с помощью события кнопки - PullRequest
4 голосов
/ 16 июня 2011

У меня есть код здесь:

private void button1_Click(object sender, EventArgs e)
{
    Application.Run(new Form3());
}

Хотя я не думаю, что именно так вы должны менять формы, когда я его запустил, он выдал ошибку с указанием:

Запуск второго цикла сообщений на один поток не является допустимой операцией

Ответы [ 6 ]

4 голосов
/ 16 июня 2011

Вы не можете использовать Application.Run - то есть для запуска приложения формы Windows (внутренний цикл сообщений, который является общим для всех форм в приложении), а не для отображения формы.Каждая форма имеет метод Show и Hide, поэтому вы должны просто вызвать:

private void button1_Click(object sender, EventArgs e)
{
    Form3 f = new Form3(); // This is bad
    f.Show();
}

Но вы не должны создавать форму каждый раз, когда хотите ее показать.Если вы хотите иметь только один экземпляр формы, вы должны сохранить его как глобальный и показывать или скрывать его только по требованию.В противном случае вам придется вызвать Close вместо Hide, чтобы очистить все ресурсы, которые использует форма.

2 голосов
/ 16 июня 2011

вы можете сделать так просто, как есть:

test mp = new test();
mp.Text = " Welcome Mr." + textBox1.Text;
this.Hide();
mp.ShowDialog();
this.Close();

где тест - твоя новая форма и затем, если вы передадите переменные в другую форму, просто сделайте переменную общедоступной, тогда вы можете сделать:

 mp.Text = " Welcome Mr." + textBox1.Text;

затем showdialog, чтобы показать новую форму и закрыть старую форму ..

1 голос
/ 16 июня 2011

Ваша первая форма должна создавать вторую форму при первом использовании и скрывать себя от просмотра.Тогда вторая форма будет скрыта и покажет первую форму при переключении обратно.Примерно так ...

  private Form _firstForm;
  private Form _secondForm;

  private void switchToSecond_Click(object sender, EventArgs e)
  {    
      if (_secondForm == null)
          _secondForm = new SecondForm();

      Hide();
      _secondForm.Show();
  }

  private void switchToFirst_Click(object sender, EventArgs e)
  {    
      Hide();
      _firstForm.Show();
  }

Вы бы присвоили firstForm значение this внутри конструктора первого класса формы и потому что это основная формаон всегда будет создаваться при запуске приложения.Если вы хотите сохранить ресурсы, вы также можете избавиться от второй формы, когда вернетесь к первой, и создавать ее заново при каждом переключении.

0 голосов
/ 04 апреля 2019

Предположим, у вас есть Form1 и Form2 Ваша сфера не ясна, если вы хотите

  1. Переключайтесь между Form1 и Form2 и сохраняйте их обоих живыми.

  2. Храните только Form1 или Form2 одновременно.

для случая 1 достаточно простого Form1.Hide() and Form2.Show().

для случая 2 решение будет немного сложным.

  1. Создайте свой собственный экземпляр ApplicationContext MyAppCxt= new ApplicationContext().
  2. вместо значения по умолчанию Program.Run(Form1) вызов Program.Run(MyAppCxt(Form1))
  3. в обработчике какого-либо события, когда нужно переключить Form1 и Form2

    Form2 f2 = new Form2();//Create the new form MyAppCxt.MainForm = f2;//set Form2 as MainForm in the message queue Form2.Close()//Close Form2 and release all the resource F2.Show();//display Form2 to the user

тот же сценарий будет повторяться при необходимости переключения между Form2 и Form1

0 голосов
/ 09 января 2018

this.Hide ();

Меню Меню = новое меню ();

имя вашей формы .Show ();

0 голосов
/ 16 июня 2011

Взгляните на следующую ссылку Какой лучший способ переключения между формами в C #?

По сути, вы показываете и скрываете формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...