我有一个Panel对象,该对象是在另一个也动态创建的Panel对象中动态创建的。如何从子面板中获取父面板的名称?
我只找到与Form对象有关的信息。
可以帮助找到孩子的父母的几种方法。
[Control的直接父级由Control.Parent
属性返回:
Dim parentName = [SomeControl].Parent.Name
Form容器是通过FindForm()方法或Control.TopLevelControl
属性返回的:
Control.TopLevelControl
您也可以使用Dim myForm1 = [SomeControl].FindForm()
Dim myForm2 = [SomeControl].TopLevelControl
Dim myFormName1 = myForm1.Name
Dim myFormName2 = myForm2.Name
,它返回最外面的GetContainerControl()。
UserControl可以使用IContainerControl属性(但与ParentForm相同)
要查找不是Form的外部容器:
FindForm()
要查找特定类型的外部祖先(例如,您在TabControl的TabPage内的Panel中有一个Panel,并且您想知道它是什么TabPage:]
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
查找特定类型的最外面的Parent(一个祖先控件,除了Form外,没有其他Parents:
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
当然是想要找到其父项的子控件的实例。