如何处理.NET TabPage控件全部以一个Form类结尾?

时间:2020-03-06 14:47:07  来源:igfitidea点击:

我想用TabControl构建一个Form,但是我想避免让每个TabPage上的每个控件最终成为要向其中添加TabControl的Form的成员。到目前为止,我已经确定了这些选项,请发表评论或者提出其他选择:

1)为每个TabPage编写一个UserControl

2)仅在主窗体上保留控件,但将控件变量公开并将所有实际代码剪切并粘贴到单独的类中

3)放弃表单设计器,并在运行时执行所有操作

4)从Tabpage派生(不确定是否可行,以及设计时的含义是什么)

谢谢大家

安德鲁

解决方案

在任何复杂的WinForms应用程序中,我们可能会遇到表单上控件过多的问题。并不是说我们会遇到硬性限制,而是会遇到痛苦点-如我们所描述的。

在大多数情况下,对我而言,选择#1(每个选项卡页面的用户控件)是最不痛苦的方法。它使我们可以按照自己的方式封装控件的逻辑细分,并对其范围进行适当地设定范围。

不利的一面是,我们最终可能会在用户控件上暴露大量属性。但是,解决该问题的方法非常简单:使用自定义类表示与该控件"绑定"的数据,然后为该类的绑定实例提供单个属性。

总体上,我们将拥有更好的体系结构,更加可维护,并且,此外,我们也不会为使表格正常工作而发疯。 :)

编辑:

我应该注意,我们可能最终还需要从代表标签页的用户控件中公开一些自定义事件。本质上,如果选项卡上有一个控件,其父窗体需要该事件,则必须创建一个事件并引发该事件,以便父窗体知道该事件。这并不是很困难,但是可以为用户控件添加大量的LOC。

选项1是最好的选择,因为它允许我们使用设计器来布局UserControl的内容,并使不同的开发人员可以轻松地同时处理不同的UserControl实例。

选项2是个坏主意,因为如果要更改布局,设计人员将生成一些新代码,并且必须手动纠正剪切粘贴。

选项3的工作量将比使用设计师组织布局的工作量多10倍。

选项4与UserControl无关,但是我们需要对TabPage类进行一些更改,以使其能够用作设计图。

所以我会坚持选择1.