从基本表单访问继承表单上的组件

时间:2008-08-27 20:16:59

标签: .net winforms reflection inheritance

我的项目中的许多表单都从基本表单继承。很容易得到派生表单的Controls集合,但我没有找到一种访问Components集合的简单方法,因为VS将其标记为私有。

我认为这可以通过反射来完成,但我不确定如何最好地解决它,而不是之前没有使用过反射。

现在,我正在使用一种笨重的解决方法,我在其中覆盖一个函数Ge​​tComponents并返回我感兴趣的组件数组。这显然容易出错,因为它很容易忘记实现覆盖的函数或在添加组件时更新它。

如果有人有任何提示或可以提出更好的方法,我会很高兴听到。

3 个答案:

答案 0 :(得分:1)

如果将组件的Modifiers属性设置为strict protected,则可以在不使用组件集合的情况下访问它们。

编辑: 可发现性可以使用反射来遍历每个字段。虽然在您的情况下这可能不是最理想的。

答案 1 :(得分:0)

如果您担心忘记覆盖该功能,请将其抽象化。

答案 2 :(得分:0)

在基本表单类中将“components”修饰符设置为protected。删除所有派生表单中的“组件”声明。

在基本表单加载事件

中调用以下方法
        public void SetComponentsStyle()
    {
        if (null != this.components)
        {
            foreach (Component comp in this.components.Components)
            {
                if (comp is ToolTip)
                {

                }
                else if (comp is ContextMenuStrip)
                {

                }
            }
        }
    }