代码之家  ›  专栏  ›  技术社区  ›  Gustavo Cardoso

禁止访问继承的WinForm控件

  •  1
  • Gustavo Cardoso  · 技术社区  · 16 年前

    我正在写一个要继承的基本形式。基本窗体对我的应用程序有一些基本的标准控件。

    问题是: 我希望允许继承的表单使用和更改此控件,但不从表单中删除它们。

    最大的问题是TabControl,用户继承的表单必须添加选项卡。 如果我将baseform上tabcontrol的“modifiers”属性设置为private,那么继承的表单将无法添加新的选项卡。 如果我将baseform上tabcontrol的“modifiers”属性设置为protected,则继承表单可以从baseform中移除tabcontrol。

    有客场阻止吗?定制设计?

    2 回复  |  直到 16 年前
        1
  •  4
  •   Michael Meadows    16 年前

    古斯塔沃

    您正站在一系列问题的第一个山脚下,这些问题是您将通过强制开发人员继承“基本形式类”而遇到的。根据我的经验,以这种方式构建的框架往往非常脆弱,开发人员很难使用。

    我可以想象,通过将TabControl设置为私有,然后在窗体本身上实现公共的“Tabs”属性,您可以克服这一特定的障碍,但我也怀疑您将到达这座山的顶峰,并认识到您面前还有许多其他更高的山。我建议你重新考虑一下这个方法。

    // set the Modifiers property on tabControl1 to "Private" then implement this
    public TabControl.TabPageCollection TabPages
    {
        get { return tabControl1.TabPages; }
    }
    

    继承应该用于提供公共功能,而不是提供统一的组合。您真的应该考虑实现一个“核心屏幕”并设计您的框架,以允许开发人员将其控件“插入”到该屏幕。

    这个 Composite UI Application Block 是一个很好的开始的地方,尽管可能有一些最近的事情我不知道。

        2
  •  1
  •   Bevan    16 年前

    如果您希望窗体在Visual Studio设计器中表现得“良好”,那么您就走运了—当您直接编辑父窗体时,让选项卡控件私有化将起作用,但当您尝试编辑子窗体时,将失败。

    我相信@michael meadows的回答是正确的——他在过去自己构建了复杂的框架,但未能实现我想要的。

    从广义上讲,你所看到的 遗传 我相信 作文 会更好地为你服务。至少,这是我的经验。

    有关轻量级的想法,请查看Jeremy Millers系列的博客文章。 Build your own CAB -很多好材料。