Как скрыть стек модальных форм в.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();
}
}