2012-04-03 40 views
3

我正在製作一個應用程序,該應用程序將具有類似於Photoshop的界面:多個單獨的窗體都可以幫助編輯一個東西。所以,我會有多種形式,其中之一是「主要」(提供文件菜單,設置菜單,關於等等),而其他的則具有編輯以主窗體打開的對象的控件。C#Windows窗體,不要在任務欄中顯示窗體,但是當它顯示在那裏的窗體聚焦時,請將它放在前面

可以說爲簡單起見,這是一個文本編輯器,我有MainForm和StyleForm。現在,我需要的是整個應用程序在Windows任務欄中顯示爲一個「欄」。這可以通過爲StyleForm設置ShowInTaskbar爲false來實現,但是如果我說關注其他應用程序,然後集中我的應用程序,只有MainForm會在其他窗口的頂部,StyleForm將保持隱藏在我關注的應用程序窗口下先前。

我在這裏找到答案Make all forms associated with a program come to the front when one form is selected但它導入了一個dll。也許有這樣的.net解決方案?

另外,我想在任務欄中顯示不同的內容,而不是MainForm的標題,這可能嗎?

+0

如果這兩種形式做存在於同一個進程(同一個EXE項目或DLL項目),則不能調用一個委託並使表單也可見? – Zenwalker 2012-04-03 08:00:35

回答

11

我第二形式設置爲ShowInTaskBar = false,設置FormBorderStyleSizableToolWindow然後使用下面的代碼創建它:

public partial class Form1 : Form 
{ 
    Form2 f2; 

    public Form1() 
    { 
     InitializeComponent(); 

     f2 = new Form2(); 
     f2.Owner = this; // <-- This is the important thing 
     f2.Show(); 
    } 
} 

這使得子窗體F2上停留的Form1和皮頂部並將其顯示當Form1被隱藏並顯示。

編輯
哦,如果這很重要,我使用了Visual Studio 2010和.NET 4 Client Profile。但是,這應該適用於其他版本。

+0

+1。同樣在[Form.Owner](http://msdn.microsoft.com/en-us/library/system.windows.forms.form.owner.aspx)中,當設置屬性時,備註將寫入表單的行爲。 – Reniuz 2012-04-03 08:10:40

+1

所有者是幾乎不用的屬性,因爲它可以將所有者窗體直接傳遞給Show方法。就像在'f2.Show(this);' – Steve 2012-04-03 08:11:29

+2

@Steve:是的,但我在這裏明確地指出OP到'Owner'屬性,這是解決他的問題的關鍵。 – 2012-04-03 08:18:04

0

在主窗口中,你可以捕捉焦點事件,然後爲每個子窗體調用BringToFront方法

+0

這很明顯,但它引入了閃爍,如主題我鏈接中所述... – Istrebitel 2012-04-03 09:34:15