簡體   English   中英

C# WinForms:當父窗體最小化時,如何防止子窗體最小化?

[英]C# WinForms: How do you prevent child form from being minimized when parent form is minimized?

我正在創建一個 C# WinForms MDI 應用程序。 我有一個主窗體,其中包含其他 4 個 forms。 我希望能夠將子 forms 移到父窗體之外(它們的 FormBorderStyle 值設置為相當大的工具欄,以便單獨的 windows 不會出現在每個子窗口的任務欄上)。 我可以通過對主表單使用以下代碼來完成此操作:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace Prototype
    {
       public partial class MdiParent : Form
       {
           private FastEyeControl m_ControlForm;
           private FastEyeLogWindow m_LogForm;
           private FastEyeConfiguration m_ConfigurationForm;
           private ROCOrderWindow m_OrderLogForm;

           public MdiParent()
           {
               InitializeComponent();

               m_ControlForm       = new FastEyeControl();
               m_LogForm           = new FastEyeLogWindow();
               m_ConfigurationForm = new FastEyeConfiguration();
               m_OrderLogForm      = new ROCOrderWindow();
           }

           private void MdiParent_Load(object sender, EventArgs e)
           {
               m_ControlForm.Show(this);
               m_LogForm.Show(this);
               m_ConfigurationForm.Show(this);
               m_OrderLogForm.Show(this);
           }
        }
    }

但是,當我最小化父表單時,所有子 forms 也會被最小化(如預期的那樣)。 無論如何,當父 window 最小化時,是否有任何子 forms 被最小化? 基本上,如果需要,我希望用戶能夠調整單個子 forms 的大小並將其移動到父窗體之外(例如取消停靠 Visual Studio.NET 中的工具欄並將其放置在另一個監視器中)。 謝謝你的幫助!

我認為您將不得不從擁有/父級/mdi windows 中移出,而必須將它們全部設為無主頂級 windows,彼此“平行”。 然后編寫自己的邏輯,將一個 window 對接到另一個 window。

您實際上還沒有創建 MDI 應用程序,也沒有設置子窗體的 MdiParent 屬性。 應該清晰可見,您可以將子窗體移動到主窗體的范圍之外。

您通過使用 Show(owner) 重載讓他們擁有 windows。 這意味着它們將始終位於主 window 之上。 當您最小化主 window 時,也會被最小化。

只需調用 Show() 方法(無參數)。

好的,我開始工作了:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace Prototype
{
    public partial class MdiParent : Form
    {
        private FastEyeControl m_ControlForm;
        private FastEyeLogWindow m_LogForm;
        private FastEyeConfiguration m_ConfigurationForm;
        private ROCOrderWindow m_OrderLogForm;

        private Point m_ControlFormLocation;
        private Point m_LogFormLocation;
        private Point m_ConfigurationFormLocation;
        private Point m_OrderLogFormLocation;

        public MdiParent()
        {
            InitializeComponent();

            m_ControlForm       = new FastEyeControl();
            m_LogForm           = new FastEyeLogWindow();
            m_ConfigurationForm = new FastEyeConfiguration();
            m_OrderLogForm      = new ROCOrderWindow();

            m_ControlFormLocation = new Point(0, 25);
            m_LogFormLocation = new Point(0, 405);
            m_ConfigurationFormLocation = new Point(550, 25);
            m_OrderLogFormLocation = new Point(0, 630);
        }

        private void MdiParent_Load(object sender, EventArgs e)
        {
            DockForm(m_ControlForm, m_ControlFormLocation);
            DockForm(m_LogForm, m_LogFormLocation);
            DockForm(m_ConfigurationForm, m_ConfigurationFormLocation);
            DockForm(m_OrderLogForm, m_OrderLogFormLocation);
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void DockForm(Form form, Point location)
        {
            form.TopLevel = false;
            form.Location = location;

            if (! this.Controls.Contains(form))
            {
                this.Controls.Add(form);
            }

            form.Visible = true;
        }

        private void UndockForm(Form form)
        {
            if (this.Controls.Contains(form))
            {
                this.Controls.Remove(form);
            }

            form.TopLevel = true;
            form.Visible = true;
        }

        private void DockOrUndockForm(Form form, Point location)
        {
            if (this.Controls.Contains(form))
            {
                UndockForm(form);
            }
            else
            {
                DockForm(form, location);
            }
        }

        private void ToggleDockingOrDockForm(Form form, Point location)
        {
            if (form.Visible)
            {
                DockOrUndockForm(form, location);
            }
            else
            {
                DockForm(form, location);
            }
        }

        private void fastEyeControlToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ToggleDockingOrDockForm(m_ControlForm, m_ControlFormLocation);
        }

        private void fastEyeLogToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ToggleDockingOrDockForm(m_LogForm, m_LogFormLocation);
        }

        private void fastEyeConfigurationToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ToggleDockingOrDockForm(m_ConfigurationForm, m_ConfigurationFormLocation);
        }

        private void rOCOrderLogToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ToggleDockingOrDockForm(m_OrderLogForm, m_OrderLogFormLocation);
        }
    }
}

這段代碼安全嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM