1

私は次のように5つのフォームを持っています:

  • フォーム1
  • フォーム2
  • Form3
  • Form4
  • Form5

Form1 は私のスタートアップ フォームです。このフォームには、他のフォーム (form2、form3、form4、form5) を表示するための 4 つのボタンがあります。 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

子フォームがメイン フォームの背後に表示されることは本当に意味があるのでしょうか。親フォームが完全に最大化されている場合はどうなりますか?

そうしないと、各フォームのボタン クリックは次のようになります。

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

        }

これにより、サブフォームの親がボタン クリックを含むフォームに設定されます。

サブフォームをメインフォームの背後に表示する必要がある場合は、Benjamin Danger Johnson が提案したようなことを行う必要があります。

于 2012-09-26T23:00:17.590 に答える
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 に答える