【问题标题】:Need IntPtr for a Form (VB.Net)表单需要 IntPtr (VB.Net)
【发布时间】:2010-10-24 20:58:15
【问题描述】:

我需要表格的 intPtr。 Control.FromHandle(control) 给了我一个句柄的控制权,但我需要相反的——从一个控件中获取句柄。我该怎么做?

【问题讨论】:

    标签: .net vb.net winforms handle intptr


    【解决方案1】:

    注意:这仅在控件的句柄创建后才有效。在创建控件和渲染到某种程度之间有一个时间窗口,这可能会返回 IntPtr.Zero

    我不同意 JaredPar 的观点:如果句柄尚未创建,则 Handle 属性的 get 访问器调用 CreateHandle(您可以使用 Reflector 检查)。意识到这一点很重要,因为在某些情况下它可能会产生意想不到的后果

    【讨论】:

    • 检查反射器中的方法。在某些情况下,它根本不会创建句柄。它不保证会发生,但在某些配置下可能会发生。
    • 我必须承认我没有分析 CreateHandle 方法的代码......现在我分析了,我觉得它有点混乱,我不确定它是否总是创建句柄。所以也许你最终是对的;)
    • @Thomas,有一个极端的极端情况,底层状态阻止创建句柄。我只知道它的存在是因为我以前打过它,因为我认为 Handle 在被处置之前将是有效的。大约 2 年,所以我不记得细节(只有痛苦:))。
    【解决方案2】:

    试试

    Dim handle As IntPtr = someControl.Handle
    

    注意:这仅在控件的句柄创建后才有效。在创建控件和渲染到某种程度之间有一个时间窗口,可能返回 IntPtr.Zero

    【讨论】:

      猜你喜欢
      • 2016-07-04
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      相关资源
      最近更新 更多