我有以下问题:
我在堆栈中打开多个模态表单(例如,form1 打开模态表单 form2 进而打开模态表单 form3等)。我想隐藏整个堆栈。
我尝试调用 Hide 方法或在父级上设置 Visible 属性,但这只会隐藏父级。我还尝试单独隐藏每个表单,但随后我必须在每个表单上调用 ShowDialog 来锁定我调用上述方法的线程。
有没有办法设置模态对话框,以便它们继承父级的状态并通过在第一个表单上设置属性来隐藏在级联中?
我也愿意接受其他建议。
我有以下问题:
我在堆栈中打开多个模态表单(例如,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();
}
}