2012-05-03 27 views
0

我正在写一个需要形式句柄的类,但是有一种方法可以在不将它作为参数在类的构造函数或属性中发送的情况下使用它?在vb.net类中使用表单句柄而不将其作为参数传递?

我知道处理程序没有设置,直到窗体完全加载,所以这也是另一个问题。

基本的想法是捕获窗体句柄,而不将它作为参数传递并处理wm消息。

回答

2

你不明白'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 
+0

+1:[NUnitForms](http://nunitforms.sourceforge.net/)项目使用您所说的让您通过名称或标题访问表单。它是开源的,所以你可以从那里获取代码。 –

+0

不,我需要通过窗体句柄。 “Me.Handle”这是主持窗体的内部标识符,后来让我可以看到窗口消息。 (os的内部消息)。例如:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.handle.aspx但这是控制,但它是相同的原则。 –

+0

@SeinOxygen然后从上面的方法中获取结果并使用该句柄。查看已更新的答案 – Steve

相关问题