【问题标题】:ShowDialog() while another form is visible through ShowDialog() as well, closes both?ShowDialog() 虽然通过 ShowDialog() 也可以看到另一个表单,但两者都关闭了?
【发布时间】:2010-01-29 11:05:29
【问题描述】:

我有以下情况:

  1. ParentForm 打开 WelcomeFormShowDialog
  2. WelcomeForm 包含一个打开 NewProjectFormShowDialog 的按钮
  3. 当用户在NewProjectForm 上点击OK 时,会创建一个新项目并关闭两个表单(良好行为)
  4. 当用户在NewProjectForm 上点击CANCEL 时,两个表单都关闭(可以理解的行为,但不可取)。

我怀疑这与DialogResult 有某种关系(实际上是DialogResult.None on CANCEL NewProjectForm

在不关闭两个表单的情况下如何获得上述情况?

编辑
用于打开NewProjectForm的代码:

ProjectNew projectNew = new ProjectNew();
projectNew.StartPosition = FormStartPosition.CenterParent;
projectNew.ShowDialog(this);

用于打开WelcomeForm的代码:

Welcome welcome = new Welcome();
welcome.StartPosition = FormStartPosition.CenterParent;
welcome.ShowDialog(this);

注意:NewProjectForm不是Welcome打开,而是由ParentForm打开

编辑 2
奇怪的东西;我用相同的代码/情况创建了一个新项目,它不会重现这种行为......

【问题讨论】:

  • 你能分享显示NewProjectForm的代码吗?
  • 鉴于代码示例,当 NewProjectForm 关闭时 WelcomeForm 应该关闭似乎很奇怪。这是在按钮点击事件中完成的吗?
  • 您需要粘贴更多代码 - 最好是两个表单的整个类。

标签: c# winforms showdialog


【解决方案1】:

这是一个长期存在的问题,我遇到过几次。 This 帖子对此有更多讨论,以及解决方法。

它显然已在 .Net 3.5 SP1 中得到修复(安装 SP1 后我无法再复制它),尽管我没有看到任何官方消息表明它确实已修复。

【讨论】:

  • 我看过那篇帖子并尝试通过设置 DialogResult = DialogResult.None 来解决这个问题,但这也无济于事。
  • 我也无法重现该行为(在 .NET 3.5 SP1 和 .NET 4 Beta 2 上测试)
【解决方案2】:

我被这个咬住了,因为我从另一个表单复制/粘贴了一些按钮,没有意识到其中一个 按钮 的 DialogResult 属性设置为 DialogResult.Cancel .

点击时,这是设置包含表单的 DialogResult,导致它关闭。

将其重置为 DialogResult.None 解决了问题。

因此,请检查所有模式对话框的 DialogResult 属性。

【讨论】:

    【解决方案3】:

    删除了几个按钮,添加了一个新按钮:已解决。
    所以我认为它应该是一个 DialogResult 不知何故,奇怪的东西。

    【讨论】:

    • 我怀疑按钮的 DialogResult 属性设置为 None 以外的值。这可以解释为什么这解决了问题。看我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多