获取子面板的父面板名称

问题描述 投票:0回答:1

我有一个Panel对象,该对象是在另一个也动态创建的Panel对象中动态创建的。如何从子面板中获取父面板的名称?

我只找到与Form对象有关的信息。

vb.net winforms controls panel
1个回答
0
投票

可以帮助找到孩子的父母的几种方法。

[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 当然是想要找到其父项的子控件的实例。

© www.soinside.com 2019 - 2024. All rights reserved.