簡體   English   中英

獲取子面板的父級名稱

[英]Get the name of the Parent of a child Panel

我有一個面板 object,它是在另一個也是動態創建的面板 object 中動態創建的。
如何從子面板中獲取父面板的名稱?

我只找到了與表格 object 相關的信息。

有幾種方法可能有助於找到孩子的父母。

Control.Parent屬性返回 Control 的直接父級:

Dim parentName = [SomeControl].Parent.Name

Form 容器由FindForm()方法或Control.TopLevelControl屬性返回:

Dim myForm1 = [SomeControl].FindForm()
Dim myForm2 = [SomeControl].TopLevelControl
Dim myFormName1 = myForm1.Name
Dim myFormName2 = myForm2.Name

您也可以使用GetContainerControl() ,這將返回最外面的IContainerControl

UserControl 可以使用ParentForm屬性(但它與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 是什么):

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)

要查找特定類型的最外層父級:
(例如,您在一個面板內的一個面板內有一個面板,該面板位於面板內的 TabControl 的 TabPage 內,並且您想要獲得最后一個面板)

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

[SomeControl]當然是想要找到它的父控件的子控件的實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM