禁止访问Inherited winform控件

时间:2009-06-04 21:23:21

标签: c# winforms inheritance custom-controls

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

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

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

还有一个可以阻止这个吗?定制设计?

2 个答案:

答案 0 :(得分: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是一个很好的起点,虽然可能会有一些我不知道的更近期。

答案 1 :(得分:1)

如果您希望表单在Visual Studio设计器中表现得很“漂亮”,那么您运气不佳 - 当您直接编辑父表单时,Tab Control私有会起作用,但是当您尝试时会失败编辑后代。

我相信@Michael Meadows的答案是正确的 - 过去我自己构建了精心设计的框架,但未能提供我想要的内容。

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

对于轻量级创意,请查看Jeremy Millers系列博客文章Build your own CAB - 许多优秀材料。