如何在.NET Windows窗体中隐藏模式窗体堆栈
本文关键字:窗体 隐藏 模式 堆栈 Windows NET | 更新日期: 2023-09-27 18:22:11
我有以下问题:
我在一个堆栈中打开多个模态表单(例如,form1打开模态表单form2,然后打开模态表单form3等)。我想隐藏整个堆栈。
我尝试调用Hide方法或在父对象上设置Visible属性,但这只会隐藏父对象。我还尝试单独隐藏每个表单,但随后我必须在每个表单上调用ShowDialog,以锁定我调用上述方法的线程。
有没有一种方法可以设置模式对话框,使它们继承父对话框的状态,并通过在第一个窗体上设置属性来隐藏在级联中?
我也愿意接受其他建议。
要重新显示通过设置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();
}
}