2009-06-04 51 views
1

我正在编写一个BaseForm来继承。 BaseForm对我的应用程序有一些基本的标准控制。禁止访问继承的winform控件

问题是: 我想允许继承的表单使用并更改此控件,但不能将它们从窗体中删除。

最大的问题是一个TabControl必须由用户添加Tabs的继承形式。 如果我在BaseForm上将TabControl的“Modifiers”属性设置为private,则继承的Forms将无法添加新的Tabs。 如果我将BaseControl上的TabControl的“Modifiers”属性设置为protected,则继承Forms可以从BaseForm中删除TabControl。

有一个客人停止这个?定制设计?

+0

你不能在Visual Studio中创建模板表单吗? – 2009-06-05 03:49:51

回答

4

古斯塔沃,

你站在那,你会迫使开发商从继承遇到问题山脉的山麓第一的底部“基本形式类。”根据我的经验,以这种方式构建的框架往往非常脆弱,开发人员很难使用。

我想你可以通过将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是一个很好的开始,尽管可能有一些我不知道的更近的东西。

+0

谢谢您的评论。 我的项目是一个基于插件的应用程序。第三方使用将通过附加功能添加。我关于继承形式的问题是控制我公司内部的项目。 您的想法很好,但我不想尝试public-properties/private-attributes,因为我希望使用Visual Design来构建继承的窗体。 – 2009-06-05 02:29:42

1

如果您希望表单在Visual Studio设计器中表现“很好”,那么您运气不佳 - 在您直接编辑父表单时会使Tab控件保持私有状态,但当您尝试编辑后代。

我相信@Michael Meadows对他的回答是正确的 - 在过去我自己构建了精心设计的框架,未能实现我想要的。

从广义上讲,在那里你正在寻找与继承拉东西放在一起,我相信组成将更好地为您服务。至少,这是我的经验。

对于轻量级创意,请查看Jeremy Millers系列博客文章Build your own CAB - 很多很好的素材。