2011-11-19 109 views
6

我有一個系統,其中主窗體是菜單,並在加載時彈出一個登錄窗體。 最初它在菜單下面加載了登錄表單,所以我使用了this.topmost = true使它到達前端。 (因爲帶到前面,併發回來沒有工作)登錄表單不會丟失焦點

但是,如果用戶然後點擊其他的東西,說鉻,然後它仍然停留在z順序的頂部,由最高層的定義。

我試着使用停用事件,但這意味着在加載時它會再次出現在菜單表單後面。

我怎樣才能阻止它從我的菜單表單後面加載,但是當它失去焦點時,它會阻止它從最頂層?

private void login_Deactivate(object sender, EventArgs e) 
{ 
    // do not want it to remain top most when the application is not in focus. 
    this.TopMost = false; 
} 

在菜單形式:

private void Menu_Load(object sender, EventArgs e) 
{ 
    openLogin() 
} 

private void openLogin() 
{ 
    Cursor.Current = Cursors.WaitCursor; 
    login theForm = new login(this);    
    this.Enabled = false;    
    theForm.Show(); 
    Cursor.Current = Cursors.Default; 
    theForm.Activate(); 
    theForm.TopMost = true; // Make the login form display over the Menu  
}   

回答

2

嘗試登錄的Form Owner屬性設置爲菜單形式。

從以上MSDN鏈接:

當窗體通過另一種形式所擁有,它被關閉或隱藏與所述 所有者形式。 ... 擁有的表格也永遠不會顯示在它們的 所有者表單後面。您可以使用擁有的窗體,例如find和 替換窗口,當所有者窗體選擇爲 時,窗口不應該消失。要確定父表單所擁有的表單,請使用 OwnedForms屬性

+0

非常感謝,瞬間工作!歡呼 –

+0

很高興能有所幫助。 –

0

假設這是一個雙贏的窗體應用程序,然後嘗試改變theForm.Show()theForm.ShowModal()