C# 使用WinForms的组织

C# 使用WinForms的组织,c#,winforms,organization,C#,Winforms,Organization,因此,我刚刚开始开发C#WinForm应用程序,我所从事的每个项目似乎都更大,需要更多的用户功能。如果我将所有功能添加到一个表单中,显然它会很快失去控制。在我的上一个项目中,我将功能划分为各个表单,每当有人说要执行“Feature1”时,我都会实例化Feature1表单,并将其显示为一个对话框,其中主表单是它的所有者(因此他们无法单击它) 我只是好奇还有什么其他方法可以让代码在表单中保持组织。如果你被迫在一个表单上拥有大量的特性/功能,有没有一个好方法来组织项目?我只是讨厌有成百上千行的代码文件

因此,我刚刚开始开发C#WinForm应用程序,我所从事的每个项目似乎都更大,需要更多的用户功能。如果我将所有功能添加到一个表单中,显然它会很快失去控制。在我的上一个项目中,我将功能划分为各个表单,每当有人说要执行“Feature1”时,我都会实例化Feature1表单,并将其显示为一个对话框,其中主表单是它的所有者(因此他们无法单击它)

我只是好奇还有什么其他方法可以让代码在表单中保持组织。如果你被迫在一个表单上拥有大量的特性/功能,有没有一个好方法来组织项目?我只是讨厌有成百上千行的代码文件

答案可能只是在设计中,尝试预先设计UI,以便可以使用多种表单

我面临的另一个例子。我创建了一个选项卡控件,大约有5个选项卡。这5个选项卡有很多功能,都存储在同一个CS文件中。我还有别的选择吗?创建一个新的自定义TabControl类,其中包含我为该选项卡提供的特定功能


我不介意阅读,所以如果有像样的文章,请随意链接它们

我在项目中使用了将功能分组到单独的对象中,然后可以将这些对象添加到表单中。

go-to方法是控制器/演示器。其思想是,窗口应该只负责实际处理其控件的UI事件,并且应该通过调用控制器上的方法来实现,该控制器为窗口执行实际工作。窗口可以具有必要的处理程序,也可以将UI事件直接链接到控制器方法;前者通常是更简单的方法,但可能会在这里或那里偷偷插入一行真正应该在控制器方法中的代码。通过这样做,可以将表单类中的布局和表示逻辑与控制器中的业务逻辑断开


马克·霍尔关于用户控制的建议也是一个很好的建议。通过为选项卡或普通UI控件组合创建UserControl类,可以将负责布局UI部分的逻辑从主窗体的代码中分离出来,然后控件“插入”,窗口以更简单的方式使用它。这是实现自定义但可重用控件的必要条件;DRY的基本原则是,如果您在两个不同的位置有两行代码对两个不同但可互换的东西执行相同的工作,那么这些代码行应该合并到一个位置。

我倾向于按照建议从UI中分离逻辑代码。如果您这样做,您需要对如何在应用程序中进行调用保持一定的谨慎,以避免跨线程异常。我被教导创建委托和事件以从logic类更新UI,但当然也有很多关于线程安全调用的信息。

我知道这是一个迟来的答案,但如果有人仍然阅读此问题,另一种减少表单中代码行数的方法是使用。如果您使用的是属性,那么数据绑定可以使您不必一直编写处理程序,只需执行类似
PropertyName=textBox.Text。数据绑定既适用于数据集,也适用于对象。

我接受我认为完全可以满意地回答问题的答案,如果您认为有应该接受的答案,请告诉我。您是对的,您的问题没有真正的答案,很抱歉。KeithS你有没有一个非常简单的控制器/演示布局示例?或者是一篇更深入的文章。谢谢