Code:
Private Sub UserControl_Show()
On Error Resume Next
Dim ParentControl As Object, ParentControlName As String
'Set ParentControl = GetContainer(Parent.hWnd, ContainerHwnd, ParentControlName)
Set ParentControl = UserControl.Parent.GetContainerOnForm(UserControl.ContainerHwnd, ParentControlName)
Label1.Caption = "UserControl-ContainerHwnd:" & ContainerHwnd & vbCrLf & ",ControlName:" & ParentControlName & ",TypeName:" & TypeName(ParentControl)
End Sub
Code:
Public Function GetContainerOnForm(ByVal ContainerHwnd As Long, Optional BackControlName As String) As Object
'Get Usercontrol Container on form1
On Error Resume Next
Dim ctl As Object
Dim ControlHwnd As Long
If ContainerHwnd = Me.hWnd Then
Set GetContainerOnForm = Me
BackControlName = Me.Name
Exit Function
End If
For Each ctl In Me.Controls
ControlHwnd = 0
ControlHwnd = ctl.hWnd
If ControlHwnd = ContainerHwnd Then
Set GetContainerOnForm = ctl
BackControlName = ctl.Name
Exit For
End If
Next
End Function
Code:
Public Function GetContainer(FormHwnd As Long, ByVal ContainerHwnd As Long, Optional BackControlName As String) As Object
'模块中取自定义控件的父对象(可能是窗体或其他容器控件,Picture1,Frame1等)
'Parent object in a module taken from a defined control (possibly a form or other container control, Picture1,Frame1, etc.)
On Error Resume Next
Dim Frm As Form
For Each Frm In Forms
If Frm.hWnd = FormHwnd Then
Exit For
End If
Next
Dim ctl As Object
Dim ControlHwnd As Long
If ContainerHwnd = Frm.hWnd Then
Set GetContainer = Frm
BackControlName = Frm.Name
Exit Function
End If
For Each ctl In Frm.Controls
ControlHwnd = 0
ControlHwnd = ctl.hWnd
If ControlHwnd = ContainerHwnd Then
Set GetContainer = ctl
BackControlName = ctl.Name
Exit For
End If
Next
End Function