在新打开的模态窗口顶部交换打开的对话框

时间:2015-12-19 09:21:52

标签: c# .net winforms winapi dialog

我有一种情况,我有一个'飞行对话',通常在winforms应用程序中打开。现在我需要打开其他必须是模态的对话框窗口。问题是,打开模态对话框后,我需要访问“飞行对话框”,但我没有,因为它已经存在。

我发现当我从模态对话框的上下文打开新对话框时,例如像这样

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

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

我的窗口在对话窗口上。并且模态下的所有内容都被禁用,因此我可以在模态对话框和从模态上下文打开的其他窗口之间导航。

不幸的是我不想像这样实现它,因为我的飞行窗口必须保持状态,通常我不想处理该对象并再次从模态对话框的上下文打开。

您是否知道如何通过其他新打开的模式对话框交换已打开的对话框以获取两者的解决方案?

1 个答案:

答案 0 :(得分: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();
            //...
        }
    }
}