1

我有5种形式如下:

  • 表格1
  • 表格2
  • 表格3
  • 表格4
  • 表格5

Form1是我的启动表单。我在这个表单中有4个按钮来显示其他表单(form2,form3,form4,form5)。我想在form1后面显示其他表单,然后当我最小化form1时,其他表单也最小化,当我恢复 form1 其他表单也恢复了。但是 form1 总是在其他表单的顶部。

我该如何实施?

4

3 回答 3

3

以你的最佳形式试试这个。

private List<Form> subForms;
private bool minimized = false;

public TopForm()
{
    InitializeComponent();
    subForms = new List<Form>();
    subForms.Add(new SubForm(1));
    subForms.Add(new SubForm(2));
    subForms.Add(new SubForm(3));
    subForms.Add(new SubForm(4));
    subForms.Add(new SubForm(5));

    foreach (Form f in subForms)
    {
        f.Show();
    }

    BringToFront();
    Resize += OnResize;
}

/// <summary>
/// Detects a resize event and handles it according to window state.
/// </summary>
/// <param name="sender">Top form</param>
/// <param name="args">Unused</param>
private void OnResize(object sender, EventArgs args)
{
    switch (WindowState)
    {
    case FormWindowState.Normal:
        if (minimized)
        {
            minimized = false;
            OnRestore();
        }
        break;
    case FormWindowState.Minimized:
        minimized = true;
        OnMinimize();
        break;
    }
}

/// <summary>
/// Minimize all sub forms
/// </summary>
public void OnMinimize()
{
    foreach (Form form in subForms)
    {
        form.WindowState = FormWindowState.Minimized;
    }
}

/// <summary>
/// Restore all forms and bring them to the front, with this main form on top.
/// </summary>
public void OnRestore()
{
    foreach (Form form in subForms)
    {
        form.WindowState = FormWindowState.Normal;
        form.BringToFront();
    }
    BringToFront();
}
于 2012-09-26T22:51:53.813 回答
0

使用组合继承将 Z 顺序表单的任务委托给 Form1 类,或者为可以访问所有这些表单的变量的那些表单创建一个中间类。然后:

设置最顶层:

<Form>.TopMost = True;

请参阅:http: //msdn.microsoft.com/en-us/library/system.windows.forms.form.topmost (v=vs.71).aspx

要以特定顺序恢复和最小化表单(这将在您的控制类中)以相反的顺序恢复它们,这意味着您先显示表单 4,然后显示表单 3,然后显示表单 2,然后显示表单 1,然后设置表单 1 的最顶层属性。

然后,在每个表单中使用最小化的处理程序并将其与您的控制器代码集成,这样当 Form1 被最小化时,其他所有内容都会最小化(反之亦然)

祝你好运!

于 2012-09-26T22:39:39.403 回答
0

子窗体出现在主窗体后面真的有意义吗?如果父窗体完全最大化怎么办?

否则,每个表单的按钮单击将如下所示:

private void subFormBtn_Click(object sender, EventArgs e)
        {
            SubForm subForm = new SubForm();
            subForm.Show(this);

        }

这会将子表单的父级设置为包含单击按钮的表单。

如果您确实需要子表单出现在主表单后面,则需要执行 Benjamin Danger Johnson 建议的操作。

于 2012-09-26T23:00:17.590 回答