在表格类别中保留表格的方法,还是放入独特的类别?

时间:2012-05-24 20:33:11

标签: c# winforms forms class controls

我有一个带有3个制表符控件的表单,每个制表符控件都有十几个文本字段。现在我有我所有的方法来修改Form1.cs中的文本字段,这是有效的,但是是一个非常长的类。我很好奇是否是保留在表单类中调用Form控件的方法的propper方法,或者是否应该将它们分成其他类?我读了这个帖子,我可能会感到困惑,但听起来好像选择的答案是说你不应该尝试从其他类访问表单控件? How to access form methods and controls from a class in C#?

4 个答案:

答案 0 :(得分:2)

此方案中封装的最佳方法是创建包含每个选项卡的文本字段的用户控件。然后,每个选项卡上都有一个用户控件,所有特定于这些字段的逻辑都封装在自己的控件中。

答案 1 :(得分:1)

如果你可以保留访问Form内部UI数据的代码,但是运行/执行该数据计算的代码到另一个类中。通过这种方式,您将能够创建单个类或一组类,这些类可用于(比如)UnitTesting。

答案 2 :(得分:0)

这很容易完成,你只需将表单的引用传递给另一个类,但它们会紧密耦合,因此很脆弱。

更好的选择是定义一个接口并让表单实现它,但这可能会变得混乱。

其他选项是将选项卡上的控件移动到用户控件或甚至只是另一个窗体,然后将它们托管在主窗体的选项卡中。然后,您可以隔离每个选项卡的数据和操作。再次定义和实现一个或两个接口将帮助您解耦。

按照这种方式考虑,你将UI分离到选项卡,从UI的角度来看有一些底层逻辑,所以它遵循,应该有一些逻辑在分离函数控件上标签执行。我已经看到了例外情况,但通常是因为标签中的分离完全没有逻辑。

答案 3 :(得分:0)

组织应用程序的方法有很多种。将GUI(表单)与其他应用程序逻辑分开通常是一件事。只在表单中显示逻辑。为您的数据创建数据类(也称为模型)。您可能希望拥有CustomerOrderAddress等类。这些类包含“业务逻辑”,例如Order类知道如何计算税,而不是订单。

通过使用数据绑定将业务对象绑定到表单,可以节省大量精力。有关data binding的使用,请参阅我的答案。

通过使用MVC模式将逻辑分成三个部分,您可以更进一步。我不打算在这里详细解释。就这一点,MVC代表模型视图控制器。 Model是业务类,View是表单,Controller是管理模型和表单,加载和存储模型等的类。