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


Reply With Quote