WinForms组织机构

5
所以我刚刚开始开发C# WinForm应用程序,每个项目都似乎越来越大,需要更多的用户功能。如果我把所有功能添加到一个窗体中,很明显它会很快失控。我的最后一个项目中,我将功能分成单独的窗体,并且每当有人想执行“特性1”时,我会实例化Feature1窗体,并将其显示为对话框,并将主窗体作为所有者(这样他们就不能单击它了)。
我只是好奇在窗体内保持代码组织的其他方法是否存在。如果你被迫在一个窗体上拥有大量的功能/功能,是否有一种好的方法来保持项目组织?我简直讨厌一个有着数百/数千行长的代码文件。
答案可能在设计中,尝试提前设计界面,这样可以利用多个窗体吗?
我面临的另一个例子。我创建了一个选项卡控件,有大约5个选项卡。这些5个选项卡具有大量的功能,并且都存储在同一个CS文件中。我还有什么其他选项呢?为该选项卡创建一个新的自定义TabControl类,其中包含我特定的功能?
我不介意阅读,所以如果有好的文章,请随时链接!

我接受那些我认为完全回答了我的问题并且令我满意的答案,如果你觉得有其他应该被接受的答案,请告诉我。 - Tada
你是对的,没有真正的答案回答你的问题,我道歉。 - Hanlet Escaño
4个回答

4
常用的方法是使用控制器/展示器。其思想是窗口只负责实际处理其控件的 UI 事件,并通过调用控制器上的方法来完成窗口的工作。窗口可以具有必要的处理程序,也可以将 UI 事件直接链接到控制器方法;前者通常更简单,但很容易在这里或那里加入真正应该在控制器方法中的代码。通过这样做,您将 Form 类中的布局和表现逻辑与 Controller 中的业务逻辑隔离开来。
Mark Hall 的建议使用用户控件也很好。通过为选项卡或常见 UI 控件组合创建 UserControl 类,您可以将负责布局用户界面的逻辑从主窗体的代码中分离出来,并且控件可以简单地“插入”,窗口可以更简单地使用它。这对于实现自定义但可重用的控件是必须的;DRY 的基本原则是,如果您在两个不同的地方有两行代码执行相同的任务,那么这些代码行应该合并到一个地方。

1
KeithS,你有没有一个非常简单的控制器/表示层布局的例子?或者可能有一篇更深入介绍这个主题的文章。谢谢! - Tada

2

我在我的项目中使用用户控件,将功能分组为单独的对象,然后再将这些对象添加到您的表单中。


1
我倾向于按照建议将逻辑代码与UI分开。如果这样做,您需要在应用程序中进行调用时要小心,以避免跨线程异常。我被教导创建委托和事件来从逻辑类更新UI,但当然MSDN也有很多关于如何进行线程安全调用的信息。

0

我知道这是一个晚回答,但如果还有人阅读这个问题,减少表单代码行数的另一种方法是使用数据绑定。如果您正在使用属性,数据绑定使得您不必经常编写处理程序来执行像PropertyName = textBox.Text;这样的操作。数据绑定适用于数据集和对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接