Application.OpenForms.Count 与表单属性的难题
有没有想过为什么 Application.OpenForms.Count 总是返回 0?在创建表单后修改某些表单属性时,在特定情况下会出现这个令人困惑的问题。
了解错误
Windows 窗体有一个已知错误,会导致表单从表单中消失Application.OpenForms 集合,如果其 ShowInTaskbar、FormBorderStyle、ControlBox、Min/MaximizedBox、RightToLeftLayout、HelpButton、 Opacity、TransparencyKey、ShowIcon 或 MdiParent 属性在创建后进行修改。这些属性在本机 CreateWindowEx() 调用中设置样式标志,要求系统使用更新后的样式重新创建窗口。
当原始窗口被销毁时,Application.OpenForms 会失去对它的跟踪。但是,当 Windows 创建新窗口时,它无法读回它。
避免该错误
要避免此错误,请在表单的构造函数中专门设置上述属性,在 Windows 调用 CreateWindowEx() 之前。避免在事件处理程序或窗口创建后执行的任何代码中修改这些属性。
Application.OpenForms 的替代方案
考虑到 OpenForms 可能出现问题,建议采用替代方法。考虑直接提供消息框的所属表单作为显示类的构造函数中的参数。大多数情况下,MessageBox 可以自动确定合适的父窗口。
如果从工作线程调用消息框,请确保在构造函数中传递当前 SynchronizationContext 并用于调用 Post()。这种方法确保了与其他 GUI 框架的兼容性。
以上是为什么修改某些表单属性后'Application.OpenForms.Count”返回 0?的详细内容。更多信息请关注PHP中文网其他相关文章!