Как скрыть стек модальных форм в .NET Windows Forms - PullRequest
0 голосов
/ 02 февраля 2012

У меня следующая проблема:

Я открываю несколько модальных форм в стеке (например, form1 открывает модальную форму form2, которая, в свою очередь, открывает модальную форму form3 и т. Д.).Я хотел бы скрыть весь стек.

Я пытался вызвать метод Hide или установить свойство Visible для родительского элемента, но это только скрывает родительский элемент.Я также пытался скрыть каждую форму по отдельности, но затем мне пришлось вызывать ShowDialog на каждой из форм, которая блокирует поток, в котором я вызываю вышеупомянутый метод.

Есть ли способ установить модальные диалоги так, чтобыони наследуют статус родителя и скрываются в каскаде, просто устанавливая свойство в первой форме?

Я также открыт для других предложений.

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

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

public partial class Form1 : Form
{
    Form2 frm2 = new Form2();

    public Form1()
    {
        InitializeComponent();
        frm2.VisibleChanged += frm2_VisibleChanged;
        Shown += Form1_Shown;
    }

    void Form1_Shown(object sender, EventArgs e)
    {
        frm2.ShowDialog();
    }

    void frm2_VisibleChanged(object sender, EventArgs e)
    {
        if (frm2.Visible == false) Hide();
    }
}
1 голос
/ 02 февраля 2012

Чтобы снова показать форму, которую вы спрятали, установив obj.Visible = false, просто установите obj.Visible = true, а не ShowDialog.

ShowDialog инициирует цикл сообщений, что приведет к путанице, так как диалог уже запускает цикл сообщений.

...