从窗口句柄转换为窗体

本文关键字:窗体 转换 窗口句柄 | 更新日期: 2023-09-27 18:32:54

我的C#.NET Windows应用程序动态创建一堆没有名称和边框的表单,这工作正常,但是我稍后需要找到这些表单并将它们设置为最顶层的表单。我目前的逻辑是在创建时将 myForm.Handle 写入字符串,以便稍后可以引用该句柄。

这就是它失败的地方,当我准备好将其设置为最顶层的窗口时,我这样做:

Form myForm = Form.FromHandle(sFormHandle);
if (myForm != null) { myForm.TopMost = true; }

sFormHandle 是一个字符串,它需要一个 IntPtr,我该如何转换它,或者以其他方式执行此操作?

非常感谢。

从窗口句柄转换为窗体

窗体上的 Handle 属性是一个 IntPtr。为什么要将其存储为字符串?

此处的解决方案是将句柄存储为 IntPtr,而不是字符串。更好的是,如果这是所有.NET Windows表单代码,为什么不保留对表单而不是句柄的引用呢?

编辑:添加了强调。社区的共识似乎是应该保留对表单的引用,并且不应该依赖句柄。

Form

fr = (Form)Form.FromHandle(new IntPtr(int.Parse("0")));

并注意直接引用一个类...你最好尝试弱引用,因为COM类模型如果使用对类的直接引用,在删除所有引用之前,该类不会卸载!