2016-07-25 30 views
0

時關閉父窗口,我有打開使用子窗口的主窗口:選擇要關閉子窗口

this.Hide(); 
this.ShowInTaskbar = false; 
login = new frmLogin(this); 
login.Closed += (s, args) => this.Close(); 
login.Show(); 

這工作好,子窗口被打開,如果用戶點擊X按鈕,兩個窗戶關閉。

有在該窗口的按鈕但是做一個任務,如果成功的話,必須重新打開主窗口和關閉輔助窗:

// main is reference to main window, this. is the sub window 
main.ShowInTaskbar = true; 
main.Show(); 
main.BringIntoView(); 
this.Close(); 

當this.close被調用時,主窗口也關閉。我似乎無法分開它,因此如果用戶單擊X按鈕,所有內容都會關閉,但如果用戶成功登錄,則子窗口會關閉,並且主窗口將被取消隱藏。如果我刪除此行:

login.Closed += (s, args) => this.Close(); 

然後登錄工作,但如果用戶點擊X按鈕,子窗口關閉,但主窗口在後臺仍然是摩擦

回答

1

你可以做到這一點的各種方式。

不改變太多,你可以把一個布爾屬性在frmLogin,像

public bool CloseMainForm { get; private set; } 

默認值應該是真實的,當你不需要關閉主窗口,你可以把它設置爲False像

... 
main.BringIntoView(); 
this.CloseMainForm = false; 
this.Close(); 
... 

,改變你的事件處理程序

login.Closed += (s, args) => { if (login.CloseMainForm) this.Close(); };