c# - 禁止访问继承的 winform 控件

标签 c# winforms inheritance custom-controls

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

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

最大的问题是一个TabControl,其中的Tabs必须由用户Inherited Forms添加。 如果我将 BaseForm 上 TabControl 的“Modifiers”属性设置为私有(private),则继承的 Forms 将无法添加新的 Tab。 如果我将 BaseForm 上 TabControl 的“修饰符”属性设置为 protected ,则继承窗体可以从 BaseForm 中删除 TabControl。

有远方能阻止这一切吗?定制设计?

最佳答案

古斯塔沃

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

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

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

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

Composite UI Application Block是一个很好的起点,尽管可能有一些我不知道的更新内容。

关于c# - 禁止访问继承的 winform 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/953191/

相关文章:

python - __init__() 缺少 1 个必需的位置参数 : 'quantity'

c# 使用字符串参数定义在对象列表中过滤的属性

c# - 这个 C# 代码片段是如何工作的?

c# - TextBlock 附加属性绑定(bind)

c# - 如何使用 GraphicsPath 绘制形状来创建自定义控件的区域?

C++继承与构造函数、析构函数

C# - 对象组合 - 删除样板代码

c# - ERP会计年度交易表的单数据库VS多数据库?

c# - 禁用 Windows 窗体上的退出按钮?

c# - 本地和远程运行相同应用程序的不同结果 - Windows 应用程序