2015-12-19 206 views
0

我有一種情況,我有一個「飛行對話框」,通常在winforms應用程序中打開。現在我需要打開其他必須爲模態的對話窗口。問題是,打開模式對話框後,我需要訪問那個「飛行對話框」,但我沒有,因爲它是根據。在新打開的模式窗口頂部打開對話框

我發現,當我從模態對話框的情況下打開新的對話框,例如像這樣

private void ModalDialog_Load(object sender, EventArgs e) 
     { 
      f3 = new OtherDialogWichShouldBeOverModal(); 
      f3.Show(); 
     } 

     private void ModalDialog_Shown(object sender, EventArgs e) 
     { 
      f3.Activate(); 
     } 

我的窗口是在對話窗口。並且模式下的所有內容都被禁用,因此我可以在模態對話框和其他從模態上下文打開的窗口之間導航。

不幸的是,我不想這樣實現它,因爲我的飛行窗口必須保持一個狀態,通常我不想處理該對象,並且從模態對話框的上下文中再次打開。

你知道一個解決方案如何將打開的對話框與其他新打開的模式對話框交換到同時訪問嗎?

+0

傳遞主人在節目電話嗎? – Sievajet

+0

聽起來像[XY問題](http://meta.stackexchange.com/q/66377/205381)。請閱讀[Window Features](https://msdn.microsoft.com/en-us/library/windows/desktop/ms632599.aspx)以瞭解影響Z-order的因素。 [對話框](https://msdn.microsoft.com/en-us/library/windows/desktop/ms632588.aspx)說明,模式是如何實現的,以及如何實現無模式對話框。 – IInspectable

回答

0

您可以使用EnableWindow API function這樣

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool EnableWindow(IntPtr hWnd, bool bEnable); 

private void ModalDialog_Shown(object sender, EventArgs e) 
{ 
    for (int i = 0; i < Application.OpenForms.Count; i++) 
    { 
     var f = Application.OpenForms[i]; 
     if (f is OtherDialogWichShouldBeOverModal) 
     { 
      EnableWindow(f.Handle, true); 
      f.Activate(); 
      //... 
     } 
    } 
}