C# 对话框不仅仅是在关闭时隐藏自己

C# 对话框不仅仅是在关闭时隐藏自己,c#,winforms,dialog,C#,Winforms,Dialog,根据MSDN文档,对显示为的表单的关闭操作只会导致表单被隐藏。对ShowDialog()的后续调用将取消隐藏表单 事实似乎并非如此。我有一张上面有树状图的表格。在调用ShowDialog()之间会保留检查状态,但用户完成的任何节点扩展都会重置回其默认状态。此外,每次都会执行Load事件。因此,它似乎不仅仅是在“隐藏”表单。有人知道怎么回事吗 谢谢我自己也经历过这个问题。出于某种原因,至少在某些情况下,在模式窗体上调用Form.Hide或设置visible=false将调用Form.Close。为

根据MSDN文档,对显示为的表单的关闭操作只会导致表单被隐藏。对ShowDialog()的后续调用将取消隐藏表单

事实似乎并非如此。我有一张上面有树状图的表格。在调用ShowDialog()之间会保留检查状态,但用户完成的任何节点扩展都会重置回其默认状态。此外,每次都会执行Load事件。因此,它似乎不仅仅是在“隐藏”表单。有人知道怎么回事吗


谢谢

我自己也经历过这个问题。出于某种原因,至少在某些情况下,在模式窗体上调用
Form.Hide
或设置
visible=false
将调用
Form.Close
。为了解决这个问题,我将不透明度设置为零。您也可以使用
表单。改为使用Show


如果你想象一个模态对话的行为,这有点直观。它会阻止父窗口。因此,如果您将其隐藏,则用户将无法与活动窗口进行交互。FWIW,我认为行为应该是父母再次变得活跃。情况并非总是如此。

请让我们看看一些代码!我打赌你是在重新创建表单,而不是重用实例。这听起来像是你连接了一个不正确的事件。你能显示你有什么代码来处理你报告的问题吗?这是正常的行为。Winforms能够从控件中的存储状态重新创建本机窗口。但是TreeView很难,它有太多与之相关的状态。Winforms不会试图保留节点的状态。因此,当它重新创建本机窗口时,它将恢复并再次折叠所有节点。如果我正在重新创建表单,
TreeView
中的复选框和项目的状态都不会被保留。他们是。我在表单中连接的唯一事件是加载。“这很奇怪!”汉帕桑:你有什么建议来保护这个国家吗?我想我可以自己在树上运行并将状态存储在close上。如果你将不透明度设置为0,表单是否仍然“存在”并仍然捕获事件和内容,就像你无法点击它一样?(这是一件奇怪的事情……我真的不知道会发生什么)@nekizalb是的。在我的特殊情况下,我有多个窗口,所以这不是一个问题。然而,这可能是一个需要他们做更多工作(例如使用替代解决方案)的问题,具体取决于OP正在做什么。