Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将代码分解为可管理的块_C#_Winforms - Fatal编程技术网

C# 将代码分解为可管理的块

C# 将代码分解为可管理的块,c#,winforms,C#,Winforms,我有一个用C#编写的Windows窗体应用程序,其中一个窗体包含大量代码。我已经广泛使用了类来将表单代码保持在最低限度,但是由于表单有大量的选项卡页、数百个控件和数据网格等,因此表单本身的代码仍然很广泛 是否有任何方法可以将此代码分解为更易于管理和更小的项,也许每个选项卡页的解决方案中都有一个项,同时将所有代码保持在同一范围内?属于用户控件表示层的代码,可以放入扩展控件的类中。从每个选项卡中提取代码,并创建一个用户控件以包含每个选项卡的代码。(您甚至可以从TabPage继承并在init上将其添加

我有一个用C#编写的Windows窗体应用程序,其中一个窗体包含大量代码。我已经广泛使用了类来将表单代码保持在最低限度,但是由于表单有大量的选项卡页、数百个控件和数据网格等,因此表单本身的代码仍然很广泛


是否有任何方法可以将此代码分解为更易于管理和更小的项,也许每个选项卡页的解决方案中都有一个项,同时将所有代码保持在同一范围内?

属于用户控件表示层的代码,可以放入扩展控件的类中。

从每个选项卡中提取代码,并创建一个用户控件以包含每个选项卡的代码。(您甚至可以从TabPage继承并在init上将其添加到表单中)

然后,可以将用户控件添加到每个选项卡中,这样可以显著减少代码


网格等也可以交给用户控件,以显示其他控件访问所需的方法和属性的最少数量。

如果要反复定义表单控件,只需在其他选项卡上创建它们的新实例即可

创建getter和setter以访问此文件


但实际上,有很多表单控件的代码是没有问题的,我认为这就是它的方式。我以为VisualStudio应该使用?

为您生成所有这些,您可以使用它将代码拆分为多个cs文件,但我真的看不出有什么好处,唯一的解决方案是进行全面重构,将与UI无关的代码删除到单独的类中。

如果您正在寻找重构代码及其框架的方法,那么您必须了解这些原则。这是一篇很好的文章。

如果您希望在不过度移动代码的情况下获得更好的可读性和维护性,您可以使用:

#region Tab 1
#region Variables
#endregion
#region Properties
#endregion
#region Methods
#endregion
 #endregion
这将允许您在更改某个选项卡时最小化不感兴趣的部分代码。这并不完美,但可能会有所帮助。

你基本上需要这样做。这是经典应用程序的常见问题,因此您必须遵守规则并决定如何整理。这不会是一个即时修复

查找/,甚至了解其他人如何分解代码。从那里,您可以引入适合您的分层体系结构


然而,你并不孤单。Visual Studio中的重构工具(甚至更好的)可以自动执行大量复制粘贴周期,消除错误并自动保持变量名等同步。

我个人在区域方面有问题。它有时会抛出编辑器,您需要关闭并重新打开文件以重置它(我正在使用中,它可能是特定的),因此对于带有选项卡的大型表单,我倾向于使用分部类


在Visual Studio/SharpDevelop文件资源管理器中,您可以做的一个巧妙的技巧是将分部类的文件拖到该类的主文件上,这样它们都嵌套在MainForm下(紧挨着
.designer
.resx
文件),这只会使事情更整洁。

您可以始终使用分部类。然后尝试将演示关注点与其他关注点分开。MVP架构同样适用于Winforms,但我并不宽恕它。。但是,分部类可能适合您(如果您是唯一的开发人员)…您是在寻找重新构造代码,还是只想管理现有代码。?谢谢-这有助于更轻松地来回导航