代码之家  ›  专栏  ›  技术社区  ›  Tom Juergens

从基窗体访问继承窗体上的组件

  •  1
  • Tom Juergens  · 技术社区  · 17 年前

    我的项目中有许多表单继承自基表单。在派生窗体的控件集合中很容易获取,但我还没有找到访问组件集合的简单方法,因为VS将其标记为私有。

    我想这可以通过反射来完成,但我不确定如何最好地进行,因为我以前没有处理过反射。

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

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

    3 回复  |  直到 17 年前
        1
  •  1
  •   Lars Truijens    17 年前

    如果将组件的Modifiers属性设置为strict protected,则无需使用组件集合即可访问它们。

    编辑: 可发现性可以通过反射来实现。尽管这在你的情况下可能是次优的。

        2
  •  0
  •   Joel Coehoorn    17 年前

    如果你担心忘记重写函数,那么就把它抽象化。

        3
  •  0
  •   Albert    13 年前

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

    在基窗体加载事件中调用下面的方法,

            public void SetComponentsStyle()
        {
            if (null != this.components)
            {
                foreach (Component comp in this.components.Components)
                {
                    if (comp is ToolTip)
                    {
    
                    }
                    else if (comp is ContextMenuStrip)
                    {
    
                    }
                }
            }
        }
    
    推荐文章