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),则字体对话框显示正常。
我在使用时遇到了类似的问题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)
我不确定您是否已经找到了不同的解决方案,因为这已经有几个月了。如果你这样做了,我很好奇你发现了什么。
编辑:我刚刚读了你的评论,看起来我们找到了类似的解决方案。
尝试使用您的模态形式作为您的所有者FontDialog:
yourFontDialog.ShowDialog(yourModalForm);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4059 次 |
| 最近记录: |