Окна формы крутятся в c # - PullRequest
0 голосов
/ 08 сентября 2010

У меня есть две формы окна. Теперь я должен закрыть первую и показать вторую форму и наоборот. Как я могу это сделать. Я передавал этот указатель конструктору второй формы и затем пытался закрытьно это не сработало. Я не могу использовать showdialog здесь.

Ответы [ 3 ]

0 голосов
/ 08 сентября 2010

Добавление статических переменных к каждой форме в классе Program:

static class Program
{
    public static Form1 f1=null;
    public static Form2 f2 = null;

    public static FullClose=false;

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        f1=new Form1();
        f2 = new Form2();

        Application.Run(f1);
    }
}

Затем в событии Form_Closing каждой формы:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (Program.FullClose==false)
    {
       e.Cancel = true;
       this.Visible = false;

       Program.f2.Show();
    }
}

(Измените Program.f2.Show() на Program.f1.Show() в форме 2).

Конечно, это остановит закрытие приложения, поэтому вы должны предоставить дополнительную кнопку (или аналогичную), которая устанавливает логическую статическую переменную (FullClose), которую события Form_Closing могут проверить, чтобы увидеть, должны ли они правильно закрываться или нет.

0 голосов
/ 08 сентября 2010

В каждом случае есть одна форма, которая представляет жизнь вашего приложения. Эта форма будет запущена в вашем файле Program.cs по телефону

Application.Run(new MyForm());

Если вы попытаетесь запустить в этой форме еще одну, и это впоследствии убьет его создателя, это всегда приведет к плохим конструкциям.

Вместо этого вы должны создать некоторую супер-форму . Он невидим и содержит связующий код между этими двумя формами. Сразу после запуска он создает обе формы и показывает первую. Кроме того, он регистрируется в (самописном) событии в обеих формах, которое утверждает, что показывает другое. Если ваша невидимая форма получает событие из одной формы, она просто делает отправителя невидимым и отображает другую.

Последнее, но не менее важное, что вам нужно в обеих (или хотя бы в одном) формах второго события, которое закроет суперформу, закрывающую приложение.

0 голосов
/ 08 сентября 2010

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

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

Затем реализуйте в ваших формах OnClosing событие, затем в ее реализации откройте другую форму, если этот успех вернется, иначе установите Cancel в true и верните.

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