2010-08-06 53 views
1

如何在其他MDIChild表格上始終顯示MDIChild表格?顯示MDI孩子始終位於其他MDI兒童之上

我已經設置了ChildForm爲True的TopMost屬性,但窗體仍的工作方式......

我已經嘗試設置ChildForm爲True的頂級性能,並得到了錯誤信息......「父級控件的頂級樣式不能更改。「

我該如何做到這一點。

感謝

回答

1

框架顯然不支持MDI子窗口擁有彼此,所以你必須自己模仿這種行爲:

static Form f1 = new Form(); 
    static Form f2 = new Form(); 
    static Form f3 = new Form(); 

    [STAThread] 
    static void Main() 
    { 
    f1.IsMdiContainer = true; 
    f2.MdiParent = f1; 
    f3.MdiParent = f1; 
    f1.Show(); 
    f2.Show(); 
    f3.Show(); 
    f2.Activated += new EventHandler(f2_Activated); 
    Application.Run(f1); 
    } 

    static void f2_Activated(object sender, EventArgs e) 
    { 
    f3.Activate(); 
    } 

我通常只是讓所有的形式不是MDI子窗體。他們不停留在MDI容器中,但至少他們留在前面。

也許這個限制存在的原因是由於在容器內最大化所有者的MDI子時出現奇怪或模糊的期望行爲。如果您在這種情況下點擊它,上面的代碼將允許擁有的表單在最大化的父級後面。如果你在容器外部有它,那麼它將保持可見。

+0

您的代碼工作正常。但可悲的是我不得不將這個事件連接到我的應用程序的其他任何形式。 – 2010-08-06 13:07:18

+0

當孩子被激活時,MDI家長也有一個事件。 – BlueMonkMN 2010-08-08 23:07:16

0

//編輯

因爲只有你MdiChild形式之一需要集中,請嘗試以下操作:

MdiChildActivate事件重新對焦或重新激活所需的窗口作爲激活的子窗口。

您也可以使用Deactivated事件來強制執行相關子窗口的重新聚焦。

當您創建窗體並顯示它時還會附加一個調用焦點方法。

ChildForm.Focus() 

設置焦點應該使其位於最上方。

希望它有幫助。

+0

我相信福克斯將帶給形式活躍狀態,並將顯示它的所有其他形式...但是,當用戶將焦點更改爲其他形式的MDIChild時,此表單將隱藏在該表單的後面... 總之,我想實現Always on Top,但受限於我的MDIChild窗口 – 2010-08-06 12:41:45

+0

好吧,現在我得到更清晰的圖片。我的解決方案應該對錶單進行一次聚焦。謝謝澄清! – Vaibhav 2010-08-06 12:43:39

+0

當我在Form2的ActivateEvent上使用Activate代碼時,如BlueMonk所說的那樣...但是當我使用這個(頂部)窗體的Deactivate/Leave事件時,它不工作... – 2010-08-06 13:05:42

1

一個更好的解決方案,不要求改變每其他形式的: - 申報新工具箱作爲控制主父的(本):

fForm fFormObj = new fForm(); 
fFormObj.TopLevel = false; 
this.Controls.Add(fFormObj); 
fFormObj.Parent = this; 
fFormObj.TopMost = true; 
fFormObj.Show(); 
+0

感謝分享! '很棒':)' – Anne 2013-01-17 19:41:05