1

我正在编写一个要继承的 BaseForm。BaseForm 具有我的应用程序的一些基本标准控件。

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

最大的问题是 TabControl 必须由用户继承的表单添加选项卡。如果我将 BaseForm 上的 TabControl 的“修改器”属性设置为私有,则继承的表单将无法添加新选项卡。如果我将 BaseForm 上 TabControl 的“修改器”属性设置为受保护,则继承的 Forms 可以从 BaseForm 中删除 TabControl。

有办法阻止这一切吗?定制设计?

4

2 回答 2

4

古斯塔沃

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

我想你可以通过将 TabControl 设为私有然后在表单本身上实现一个公共的“Tabs”属性来克服这个特殊的障碍,但我也怀疑你会到达这座山的顶峰并意识到你有很多其他更高的山在你面前。我建议你完全重新考虑这种方法。

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

应该使用继承来提供通用功能,而不是提供统一的组合。您确实应该考虑实现“核心屏幕”并设计您的框架以允许开发人员将他们的控件“插入”到该屏幕中。

复合 UI 应用程序块是一个很好的起点,尽管可能有一些我不知道的更新。

于 2009-06-04T21:31:46.090 回答
1

如果您希望您的表单在 Visual Studio 设计器中表现得“很好”,那么您就不走运了 - 当您直接编辑父表单时,让选项卡控件私有将起作用,但当您尝试编辑后代时会失败.

我相信@Michael Meadows 的回答是正确的——过去我自己构建了复杂的框架,但未能提供我想要的东西。

从广义上讲,如果您正在考虑将事物与继承结合在一起,我相信组合会更好地为您服务。至少,这是我的经验。

对于轻量级的想法,请查看 Jeremy Millers 系列博客文章构建您自己的 CAB - 大量的好材料。

于 2009-06-05T03:43:22.470 回答