我正在写一个需要形式句柄的类,但是有一种方法可以在不将它作为参数在类的构造函数或属性中发送的情况下使用它?在vb.net类中使用表单句柄而不将其作为参数传递?
我知道处理程序没有设置,直到窗体完全加载,所以这也是另一个问题。
基本的想法是捕获窗体句柄,而不将它作为参数传递并处理wm消息。
我正在写一个需要形式句柄的类,但是有一种方法可以在不将它作为参数在类的构造函数或属性中发送的情况下使用它?在vb.net类中使用表单句柄而不将其作为参数传递?
我知道处理程序没有设置,直到窗体完全加载,所以这也是另一个问题。
基本的想法是捕获窗体句柄,而不将它作为参数传递并处理wm消息。
最后我找到了符合我需求的解决方案。
http://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.createhandle.aspx
这让我创造一个“幽灵窗口”,并获得它的处理程序没有改变我的课或通过处理器在构造函数或属性的运行时间。
其他需要的东西是处理WM的这也解决了问题。
请注意,WM和表单处理程序是“虚拟窗口”,而不是托管接口的窗体。
你不明白'Form Handle'(表单对象本身或Form.Handle属性)是什么意思?
但是,你可以使用My.Application.OpenForms收集(see here)循环上的所有打开的窗体,找到你需要知道它的名称或名称
Private Function GetFormByTitle(title as String) as Form
Dim result As Form
For Each f As Form In My.Application.OpenForms
if f.Text = title then
result = f
Exit For
End If
Next
Return result
End Function
然后你可以使用结果的一个的方法来抓取已识别表格的“手柄”:
Dim h as IntPtr
Dim f as Form
f = GetFormByTitle("Caption_Of_Form")
if f IsNot Nothing then
h = f.Handle
' .... do your work with handle here
End if
+1:[NUnitForms](http://nunitforms.sourceforge.net/)项目使用您所说的让您通过名称或标题访问表单。它是开源的,所以你可以从那里获取代码。 –
不,我需要通过窗体句柄。 “Me.Handle”这是主持窗体的内部标识符,后来让我可以看到窗口消息。 (os的内部消息)。例如:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.handle.aspx但这是控制,但它是相同的原则。 –
@SeinOxygen然后从上面的方法中获取结果并使用该句柄。查看已更新的答案 – Steve