直到按下 alt 键才显示模态通用对话框

Ric*_*res 6 c# modal-dialog winforms

我正在构建一个应用程序,它显示某些操作的模式对话框。该模式对话框是使用 Form 构建的,主应用程序窗口作为所有者,在 Form.ShowDialog 方法中作为参数传递。

该模态对话框需要在单击按钮时生成一个通用对话框,(FontDialog) 一个通用对话框也显示为模态窗口。

所以“所有者层次结构”是 (A --> B 表示 A "拥有" B) MainApp --> ModalDialog --> FontDialog

好的,问题是 FontDialog 不会以任何方式显示,除非我按下 ALT 键。该应用程序的行为几乎与预期的一样,即当我调用 FontDialog.ShowDialog() 时,我无法将焦点设置到 MainApp 窗口和 ModalDialog,但是 FontDialog 只是“不可见”,直到我按下 ALT 键(只是那个单一的键),然后出现。

任何人都知道为什么会发生这种情况?我尝试将 FormDialog 的所有者设置为 null(因此使用桌面作为所有者窗口),但它的行为方式同样错误。

提前致谢。

一些代码

public class SnapshotDialogView : Form
{
        /// bla bla bla


        ///
        /// Button click handler
        private void btnChangeFont_Click(object sender, EventArgs e)
        {
            // this.Owner == MainAppWindow
            DialogResult result = fontDialog.ShowDialog(this);

            if (DialogResult.Cancel == result)
                return;

            Presenter.ChangeLabelsFont(fontDialog.Font);
        }
}
Run Code Online (Sandbox Code Playgroud)

啊,是的,还有一件事。如果我在调用 FontDialog.ShowDialog() 之前隐藏 ModalDialogForm(代码中的 SnapshotDialogView),则字体对话框显示正常。

182*_*216 5

我在使用时遇到了类似的问题MessageBox.Show()。经过一番阅读/测试后,我发现这是覆盖我的组件之一
的副作用。onPaint()我猜当主框架失去焦点时,它会错过刷新或其他东西,因为任何会导致它重新绘制的东西都会使 MessageBox 显示出来。

Visible = false我的快速解决方案是在显示对话框之前设置组件,然后将其设置为 true:

    private void btn_Click(object sender, EventArgs e)
    {
        Grid.Visible = false;
        MessageBox.Show("asdf");
        Grid.Visible = true;
    }
Run Code Online (Sandbox Code Playgroud)

我不确定您是否已经找到了不同的解决方案,因为这已经有几个月了。如果你这样做了,我很好奇你发现了什么。

编辑:我刚刚读了你的评论,看起来我们找到了类似的解决方案。


Fré*_*idi 0

尝试使用您的模态形式作为您的所有者FontDialog

yourFontDialog.ShowDialog(yourModalForm);
Run Code Online (Sandbox Code Playgroud)