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

本文关键字:交换 对话框 窗口 新打开 模式 顶部 | 更新日期: 2023-09-27 18:27:27

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

我发现,当我从模式对话框的上下文中打开新对话框时,例如这个

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

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

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

你知道如何将打开的对话框与其他新打开的模式对话框交换以访问两者的解决方案吗?

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

您可以使用EnableWindow API函数,如此

[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();
            //...
        }
    }
}