2

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

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

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

sFormHandle是一个字符串,它需要一个IntPtr ,我该如何转换它,或者以其他方式做到这一点?

非常感谢。

4

2 回答 2

4

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

这里的解决方案是将句柄存储为 IntPtr,而不是字符串。更好的是,如果这都是 .net windows 窗体代码,为什么不保留对窗体的引用而不是句柄呢?

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

于 2013-09-26T22:59:53.243 回答
0

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

并注意对类的直接引用...如果您使用对类的直接引用,则最好尝试 WeakRefrence 因为 COM 类模型,直到所有引用都被删除,该类才会卸载!

于 2013-09-26T23:09:39.527 回答