如何构建一个方法来从基本形式vb.net获取继承表单上的组件

时间:2015-04-18 09:17:55

标签: vb.net winforms inheritance interface

我有一个包含以下代码的基本表单:

Sub New()
    InitializeComponent()
    Me.InitRibbonPageGroups()
End Sub

Sub InitRibbonPageGroups()

    Dim Ribbon As RibbonControl = Nothing

    For Each c As Object In Me.Controls
        If Not TryCast(c, WCLib.ClsCompMyRibbonControl) Is Nothing Then
            Ribbon = c
            Exit For
        End If
    Next
    If Not Ribbon Is Nothing Then
        For Each P As RibbonPage In Ribbon.Pages
            For Each RPG As WCLib.ClsCompMyRibbonPageGroup In P.Groups
                RPG.Visible = RPG.InitialVisibility
            Next
        Next
    End If

End Sub

我的问题是,在基本表单上,组件“RibbonControl”不存在,它将仅存在于从基础继承的表单上。因此,当这种方法运行时,他没有找到对me.controls的任何控制。

我的问题是,如果有任何方法可以实现此任务,我找不到替换“我”的标识符。一个从基地获得控制权。

1 个答案:

答案 0 :(得分:0)

从基本表单中可以看到派生表单上的任何RibbonControl。您的问题不是可见性,而是程序流程。

基类'构造函数在派生类的构造函数之前执行。因此,当调用InitRibbonPageGroups时,具体类别为&#39}。构造函数尚未将其控件添加到Controls集合中。这就是为什么基类无法找到它。

解决方案很简单:仅在添加InitRibbonPageGroups时才执行RibbonControl,例如在派生类的末尾'构造:

Public Class DerivedForm Inherits BaseForm
    Public Sub New
        InitializeComponent()
        InitRibbonPageGroups()
    End Sub
    '...

顺便说一句,如果您不需要从外面拨打电话,则应该InitRibbonPageGroups Protected