WPF / C #: правильная реализация для закрытия / скрытия формы во время открытия новой формы - PullRequest
0 голосов
/ 23 апреля 2010

Я искал что-то похожее с winforms, как

// in Form 1
this.Hide();    
Form2 form = new Form2();
form.Show


// in Form 2
// if button pressed, Form 1 will be displayed, while Form 2 will be Hide.

Я пытался везти в FormEventHandler, но не знаю с чего начать.

Есть предложения / идеи?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2010

(Для целей этого ответа Form1 и Form2 представляют классы, наследуемые от Windows.Window)

Я бы рекомендовал один из следующих подходов

Подход 1: Сохранение Form2 в живых и возможность показать снова

В этом случае вам нужно будет создать переменную экземпляра для Form1:

private Form2 form2;

В вашем коде, чтобы "переключиться" на Form2, сделайте это:

if(form2 == null)
{
    form2 = new Form2();

    DependencyPropertyDescriptor.FromProperty(Window.VisibilityProperty, 
            typeof(Window)).AddValueChanged(form2, Form2_VisibilityChanged);
}

Hide();

form2.Show();

Затем добавьте эту функцию к Form1:

private void Form2_VisiblityChanged(object sender, EventArgs e)
{
    if(form2.Visility == Visibility.Hidden) Show();
}

Теперь все, что вам нужно сделать, это позвонить Hide(); в Form2, чтобы он переключился обратно на Form1.

Подход 2: Закрытие Form2 и открытие нового экземпляра каждый раз

Это немного проще, и больше соответствует тому, что у вас есть:

Form2 form2 = new Form2();

form2.Closed += Form2_Closed;

Hide();

form2.Show();

Аналогично, добавьте эту функцию к Form1:

private void Form2_Closed(object sender, EventArgs e)
{
    Show();
}

Теперь, вместо того, чтобы звонить Hide(); в Form2, звоните Close();

1 голос
/ 23 апреля 2010

Свойство Visiblity для Window может быть установлено на Hidden, чтобы скрыть его. Так что, если вы находитесь в Window1:

this.Visibility = Visibility.Hidden;
Window2 win = new Window2();
win.Show();

Чтобы снова показать окно, просто измените его Visibility.

...