ShowDialog()方法无法将窗体显示在主窗体顶部

6

我有一个WinForms应用程序,处理订阅数据。主窗体检查用户是否在数据存储中(XML文件),如果不在则调用此操作。UserDetails是一个数据输入表单。

else
{
    Form frm = new UserDetails();
    frm.ShowDialog();
}

问题出在UserDetail表单未置顶,我无法选择主表单。

1
我已经编辑了你的标题。请参考“问题的标题应该包含“标签”吗?”,在那里达成共识是“不应该”。 - John Saunders
我从现在开始会牢记这件事。 - Frazzle
在这段代码上设置一个断点。当它被触发时,使用调试 + 窗口 + 线程。确保它在主线程上运行。 - Hans Passant
1
你能发一个小程序来复制这个问题吗?我尝试过的所有方法都按预期工作。 - Jon B
1
你的代码片段所在的方法是什么样子的?看到整个方法可能会有帮助。 - Mark Hall
2个回答

12

如果您的主窗体是 TopMost,可能会发生这种情况。

尝试使用

frm.ShowDialog(this);

当从主窗体调用时。

这将确保对话框是主窗体的可视子级,即使主窗体设置为TopMost,对话框也会显示在其上方。


TopMost = true 的窗体中调用 fmr.ShowDialog() 仍会将对话框置于最顶层。因此,我认为这不是问题所在。 - Jon B
@Rotem 谢谢,我尝试了 frm.ShowDialog(this); 但结果还是一样。我开始怀疑这是否是 vs2012 的 bug。 - Frazzle
@Frazzle - 检查是哪个表单引起了问题:尝试从新的默认表单启动对话框,反之亦然,尝试从主表单启动默认对话框。 - Rotem
@JonB 我会把这个留在这里,直到找到正确的答案,以避免其他人发布它。 - Rotem
@Frazzle 可能考虑编辑问题以表明他已经尝试过这个(这也是我想到的第一件事!) - Jon B
你让我的一天充满了喜悦! :D - Gonzo345

0
尝试使用以下解决方案之一:
1. 尝试使用 topmost 属性设置为 true 的 Show 方法。
frm.TopMost = true;
frm.Show(mainForm);

尝试使用ShowDialog方法。
frm.ShowDialog(mainForm);

使用上述解决方案之一取决于您的用户界面和逻辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接