【问题标题】:How to deal with .NET TabPage controls all ending up in one Form class?如何处理 .NET TabPage 控件都以一个 Form 类结束?
【发布时间】:2010-09-13 11:18:19
【问题描述】:
我想用 TabControl 构造一个表单,但我想避免每个 TabPage 上的每个控件最终都成为我要添加 TabControl 的表单的成员。到目前为止,我已经确定了这些选项,请评论或提出替代方案:
1) 为每个 TabPage 编写一个 UserControl
2) 只保留主窗体上的控件,但将控件变量公开,并将所有实际代码剪切并粘贴到单独的类中
3) 放弃表单设计器,在运行时做所有事情
4) 从标签页派生(不确定这是否可行以及设计时的含义是什么)
谢谢大家,
安德鲁
【问题讨论】:
标签:
.net
visual-studio
winforms
【解决方案1】:
在任何复杂的 WinForms 应用程序中,您都可能会遇到表单上的控件过多的问题。并不是说您会遇到硬性限制,而是您会遇到痛点——就像您所描述的那样。
在大多数情况下,对我来说,您的选项 #1(每个标签页的用户控件)是最不痛苦的方法。它允许您以自己的方式封装控件的逻辑分解,并适当地确定它们的范围。
这样做的缺点是,您最终可能会在用户控件上暴露 吨 的属性。不过,解决这个问题的方法相当简单:使用自定义类来表示“绑定”到所述控件的数据,然后为类的绑定实例公开一个属性。
总体而言,您将拥有更好的架构,更易于维护,并且作为额外的奖励,您不会为了让表单工作而发疯。 :)
编辑:
我应该注意,您最终可能还需要从代表您的标签页的用户控件中公开一些自定义事件。本质上,如果选项卡上有一个控件,其事件是父窗体需要的,则您必须创建一个事件并引发它,以便父窗体知道它。这并不是非常困难,但可以为用户控件添加重要的 LOC。
【解决方案2】:
选项 1 是最好的,因为它允许您使用设计器来布置 UserControl 的内容,并且还使不同的开发人员可以轻松地同时处理不同的 UserControl 实例。
选项 2 是个坏主意,因为如果您想更改布局,设计师将生成一些新代码,并且您的剪切粘贴必须手动更正。
选项 3 的工作量将是使用设计器组织布局的 10 倍。
选项 4 与 UserControl 相比没有任何优势,但您需要对 TabPage 类进行一些更改,以使其能够用作设计图面。
所以我会坚持选项 1。