c# - 从窗口句柄转换为表单

标签 c# winforms casting

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

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

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

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

非常感谢。

最佳答案

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

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

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

关于c# - 从窗口句柄转换为表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19040044/

相关文章:

c# - 如何使面板中的表单停止在Visual Studio中移动?

c# - 为winforms中输入路径到输出路径的每个子目录创建一个7zip文件

java - 无法从 int 转换为 byte

java - 当 B 实现 A 时,将 ConcurrentHashMap<String, B> 转换为 ConcurrentHashMap<String, A>

c - 类型转换对以下代码中的语句 1 没有影响吗?

c# - 无法部署 Razor Pages 网站

c# - 如何创建一个接受 2 个相同类型的对象、一个属性并比较值的方法

c# - 有没有办法防止 Html.ListBoxFor 剪切所选元素的溢出文本?

Datagridview 单元格的 C# Switch-case 循环

.net - Winforms 无法在 VS2012 中加载文件或程序集 'Microsoft.ReportDesigner, Version=10.0.0.0'