2015-12-19 154 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(); 
      //... 
     } 
    } 
}