我有一个显示叠加形式的Windows窗体:
private void ShowWait()
{
frmOverlay = new Base.frmOverlay("Please Wait...");
frmOverlay.Show(this);
}
这个frmOverlay
表单同时显示它显示中间的另一个表单(消息表单):
private void frmOverlay_Load(object sender, EventArgs e)
{
frmPleaseWait = new frmPleaseWait(_text);
frmPleaseWait.Show(this);
}
当我最小化主窗体时,我仍然可以看到frmPleaseWait
窗体,是否有一种方法可以在主窗体最小化时最小化所有窗体?
答案 0 :(得分:2)
您可以创建一个递归函数,以最小化所有子表单。
public void MinimizeAllChildForms(Form parent)
{
foreach(Form f in parent.OwnedForms)
{
f.WindowState = FormWindowState.Minimized;
MinimizeAllChildForms(f);
}
}
然后在您的主要表单中,从Resize
事件中调用它。
void MainForm_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
MinimizeAllChildForms(this);
}
我假设您希望frmPleaseWait
最小化frmOverlay
最小化时间。如果不这样做,那么您可以简单地将其父级设置为主窗体,以便在主窗体执行时自动最小化。
frmPleaseWait = new frmPleaseWait(_text);
frmPleaseWait.Show(MainForm);
答案 1 :(得分:0)
您可以为resize事件创建一个Eventhandler,并最小化您的表单:
Form2 f2 = null;
private void button1_Click(object sender, EventArgs e)
{
f2 = new Form2();
f2.Show();
}
private void Form1_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
f2.WindowState = FormWindowState.Minimized;
}
}
将该代码添加到您的mainform和frmOverlay