Как скрыть стек модальных форм в.NET Windows Forms

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

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

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

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

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

2 ответа

Решение

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

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

Поскольку вы говорите о модальных диалоговых окнах, это будет последний открытый, который начнет это действие. Откройте каждую форму, как в следующем примере, а затем 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();
    }
}
Другие вопросы по тегам