从窗口把手上铸造成一个表格

时间:2013-09-26 22:56:00

标签: c# winforms casting

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

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

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

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

非常感谢。

2 个答案:

答案 0 :(得分:4)

表单上的Handle属性是IntPtr。 为什么要将它存储为字符串?

这里的解决方案是将句柄存储为IntPtr,而不是字符串。 更好的是,如果这是所有.net窗口表单代码,为什么不保持对表单的引用而不是句柄?

编辑:增加重点。来自社区的共识似乎应该保留对表格的引用,不应依赖句柄。

答案 1 :(得分:0)

表格fr =(表格)Form.FromHandle(new IntPtr(int.Parse(“0”)));

并提防直接参加课程...... 你最好尝试WeakRefrence,因为COM类模型 如果你对一个班级使用直接参考, 除非删除所有引用,否则该类不会卸载!