0

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

我知道在表单完全加载之前不会设置处理程序,所以这也是另一个问题。

基本思想是捕获表单句柄而不将其作为参数传递并处理 wm 消息。

4

2 回答 2

2

目前尚不清楚“表单句柄”(表单对象本身还是 Form.Handle 属性?)是什么意思。

但是,您可以使用My.Application.OpenForms集合(请参阅此处)循环所有打开的表单并找到您需要知道其标题或名称的表单

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
于 2012-05-03T20:57:41.557 回答
0

最后我找到了适合我需要的解决方案。

http://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.createhandle.aspx

这允许我创建一个“幽灵窗口”并在运行时获取它的处理程序,而无需修改我的类或在构造函数或属性中传递处理程序。

需要的另一件事是处理 WM,这也解决了问题。

请注意,WM 和表单处理程序属于“幽灵窗口”,而不是承载界面的表单。

于 2012-05-07T01:57:28.163 回答