【问题标题】:Problems with ShowDialog in C#C# 中 ShowDialog 的问题
【发布时间】:2017-07-13 16:38:46
【问题描述】:

我使用 showdialog 来显示模态窗口,但在某些使用 Windows XP 或 Windows 7 的计算机中,在显示第二个模态窗口后,父窗口显示在前面。我的程序在 .NET 4 中。有什么建议吗?

在我的主窗口中,我有一个带有代码的按钮:

private void btnBox_Click(object sender, EventArgs e)
{
    frmBox fBox = new frmBox();
    fBox.ShowDialog();
}

我在按钮内部 frmBox 中的代码是:

private void btnSearch_Click(object sender, EventArgs e)
{
    frmSearch fSearch = new frmSearch();
    fSearch.ShowDialog();
}

【问题讨论】:

  • 您有可以重现问题的简短代码示例吗?另外,“某些装有 Windows XP 或 Windows 7 的计算机” 是什么意思?您真的是指"所有台装有 Windows XP 或 Windows 7"的计算机吗?还是不一致?
  • 您是否尝试过该属性 - Topmost = true?
  • 出于安全原因,您不应使用 Windows XP。
  • 我的程序在许多装有 Windows XP 和 Windows 7 的计算机上都可以正常工作,我有两台计算机存在这个问题

标签: c# winforms


【解决方案1】:

使用ShowDialog overload 显示对话框,该对话框将另一个Form 作为参数。这会将对话框的Owner 设置为该表单。 Owned forms 始终显示在其所有者的顶部。

来自 MSDN:

当一个表单被另一个表单拥有时,它会被关闭或隐藏 所有者形式。例如,考虑一个名为 Form2 的表单,该表单由 一个名为 Form1 的表单。如果 Form1 被关闭或最小化,Form2 也是 关闭或隐藏。 拥有的表单也永远不会显示在其后面 所有者表单。

以下代码通常就足够了,但您可能需要根据打开对话框的位置修改参数。

someForm.ShowDialog(this);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    相关资源
    最近更新 更多