2017-02-22 73 views
0

我有一個.Net winforms(C#)應用程序與它的主窗體(窗體A),它打開不同的其他形式作爲非模式(以便用戶可以在任何主窗體或子窗體獨立)另一個過程的窗口來自我的兩種形式

在某些情況下,子窗體(窗體B)會打開另一個彈出窗體(窗體C)。當這個彈出窗口被關閉時,來自另一個應用程序(例如,chrome,outlook,VS)的另一個窗口進入我的主窗體和子窗體之間。通常這個窗口就在我的主窗口下面。

在合上的形式中,z順序是:Outlook中,形式A型,B型,C型

閉形式℃後,在z-次序改變到:形式A,Outlook中,形式B

我不想具體BringToFront()我的表格A,因爲在給定的時間可能有許多表格B的實例,我不想讓我的表格A超過表格B的。

任何想法可能會導致這種行爲?有沒有辦法確保我的應用程序的所有窗體都在其他窗口之上?

回答

1

您可以通過打開它們的窗體創建子窗體。這將保持相對的z順序。

public partial class FormA : Form 
    { 

    private void button1_Click(object sender, EventArgs e) 
     { 
     FormB f = new FormB(); 
     f.Show(this); 
     } 
    } 

public partial class FormB : Form 
    { 

    private void button1_Click(object sender, EventArgs e) 
     { 
     FormC f = new FormC(); 
     f.Show(this.Owner); 
     } 
    } 

這樣做的副作用是,當表單的所有者關閉/最小化,其擁有的形式也將關閉/最小化。

+0

而且這也有副作用,如果我打開表單B的另一個實例,我不能訪問以前的表單B實例。我需要隨時訪問所有表單: – Anuruddha

+0

@Anuruddha,這裏沒有任何東西阻止你訪問以前的實例。唯一需要注意的是,所有者窗口(本例中是FormA)不能覆蓋擁有的窗口。這裏介紹了所有者擁有的Windows關係的一個很好的總結[https://msdn.microsoft.com/en-us/library/system.windows.window.owner%28v=vs.110%29.aspx ?f = 255&MSPPError = -2147217396#Remarks);它對於WPF窗口,但該列表也適用於WinForm窗口。 – TnTinMn

相關問題