如何在.NET Windows窗体中隐藏模式窗体堆栈

本文关键字:窗体 隐藏 模式 堆栈 Windows NET | 更新日期: 2023-09-27 18:22:11

我有以下问题:

我在一个堆栈中打开多个模态表单(例如,form1打开模态表单form2,然后打开模态表单form3等)。我想隐藏整个堆栈。

我尝试调用Hide方法或在父对象上设置Visible属性,但这只会隐藏父对象。我还尝试单独隐藏每个表单,但随后我必须在每个表单上调用ShowDialog,以锁定我调用上述方法的线程。

有没有一种方法可以设置模式对话框,使它们继承父对话框的状态,并通过在第一个窗体上设置属性来隐藏在级联中?

我也愿意接受其他建议。

如何在.NET Windows窗体中隐藏模式窗体堆栈

要重新显示通过设置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();
    }
}