我有一个包含以下代码的基本表单:
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的任何控制。
我的问题是,如果有任何方法可以实现此任务,我找不到替换“我”的标识符。一个从基地获得控制权。
答案 0 :(得分:0)
从基本表单中可以看到派生表单上的任何RibbonControl
。您的问题不是可见性,而是程序流程。
基类'构造函数在派生类的构造函数之前执行。因此,当调用InitRibbonPageGroups
时,具体类别为&#39}。构造函数尚未将其控件添加到Controls
集合中。这就是为什么基类无法找到它。
解决方案很简单:仅在添加InitRibbonPageGroups
时才执行RibbonControl
,例如在派生类的末尾'构造:
Public Class DerivedForm Inherits BaseForm
Public Sub New
InitializeComponent()
InitRibbonPageGroups()
End Sub
'...
顺便说一句,如果您不需要从外面拨打电话,则应该InitRibbonPageGroups
Protected
。