Vb.net 获取子面板的父面板的名称
我有一个Panel对象,它是在另一个Panel对象中动态创建的,该Panel对象也是动态创建的。Vb.net 获取子面板的父面板的名称,vb.net,winforms,controls,panel,Vb.net,Winforms,Controls,Panel,我有一个Panel对象,它是在另一个Panel对象中动态创建的,该Panel对象也是动态创建的。 如何从子面板获取父面板的名称 我只找到了与表单对象相关的信息 一些可能有助于找到孩子父母的方法 控件的直接父级由控件返回。父级属性: Dim parentName = [SomeControl].Parent.Name 表单容器由方法或属性返回: Dim myForm1 = [SomeControl].FindForm() Dim myForm2 = [SomeControl].TopLevelC
如何从子面板获取父面板的名称
我只找到了与表单对象相关的信息 一些可能有助于找到孩子父母的方法 控件的直接父级由
控件返回。父级
属性:
Dim parentName = [SomeControl].Parent.Name
表单容器由方法或属性返回:
Dim myForm1 = [SomeControl].FindForm()
Dim myForm2 = [SomeControl].TopLevelControl
Dim myFormName1 = myForm1.Name
Dim myFormName2 = myForm2.Name
您也可以使用,这将返回最外层
UserControl可以使用该属性(但它与FindForm()
相同)
要查找非表单的外部容器,请执行以下操作:
Private Function FindOuterContainer(ctrl As Control) As Control
If ctrl Is Nothing Then Return Nothing
While Not (TypeOf ctrl.Parent Is Form)
ctrl = FindOuterContainer(ctrl.Parent)
End While
Return ctrl
End Function
Dim outerContainer = FindOuterContainer([SomeControl])
Dim outerContainerName = outerContainer.Name
要查找特定类型的外部祖先(例如,您在TabControl的TabPage中的Panel中有一个Panel,您想知道它是什么TabPage):
要查找特定类型的最外层父级:(例如,您在面板中的TabControl的TabPage中的面板中有一个面板,您希望获取最后一个面板)
[SomeControl]
当然是希望找到其父控件的子控件的实例 你为什么要这个名字?如果它们是在运行时创建的,甚至可能没有名称,除非您显式地设置名称。当然,您真正想要的是面板本身,而不是它的名称。无论如何,您必须首先实际获取面板
本身,然后才能像获取任何其他属性一样获取名称
属性。
Private Function FindOuterContainerOfType(Of T)(ctrl As Control) As Control
If ctrl Is Nothing Then Return Nothing
While Not ((TypeOf ctrl.Parent Is Form) OrElse (TypeOf ctrl Is T))
ctrl = FindOuterContainerOfType(Of T)(ctrl.Parent)
End While
Return ctrl
End Function
Dim parentTabPage = FindOuterContainerOfType(Of TabPage)([SomeControl])
Console.WriteLine(parentTabPage.Name)
Private Function FindOuterMostContainerOfType(Of T)(ctrl As Control) As Control
If ctrl Is Nothing Then Return Nothing
Dim outerParent As Control = Nothing
While Not (TypeOf ctrl.Parent Is Form)
If TypeOf ctrl.Parent Is T Then outerParent = ctrl.Parent
ctrl = ctrl.Parent
End While
Return If(TypeOf outerParent Is T, outerParent, Nothing)
End Function
Dim outermostParentPanel =
TryCast(FindOuterMostContainerOfType(Of Panel)([SomeControl]), Panel)
Dim outermostParentPanelName = outermostParentPanel?.Name