0

我正在研究一个包含一些窗体和控件的winforms项目。每一个都翻译成4种语言。有一种名为“PropertiesForm”的表单,这是一个噩梦来维护:它有一个带6个标签页的标签容器,并且有超过100个控件,脏代码尝试(并且经常失败)来保持整个事物的连贯性。如何返回到干净的用户界面代码?

因为我负责这个项目,所以我尽量避免对这个表单做很大的修改,但它不再可行。做出重大改变将会困难而且缓慢,并可能导致稳定性问题。那么,恢复干净易懂的代码的最佳方法是什么?

我的想法是为每个标签页至少设置一个控件,并在窗体中同步它们。我的问题是,我不知道用visual studio做到这一点的简单方法。有没有自动的方法来保持翻译和事件处理程序在新控件中,因为复制粘贴使它们消失?是否有任何工具或加载项为此任务设计?

在不破坏一切的情况下清洁结构应该怎么办?

回答

1

据我所知,没有这样的工具,我不知道它应该存在什么原则。

我只是简单地创建6个用户控件,从相应控件中的每个标签页中剪切控件并将其粘贴到新创建的控件中。之后,通过在各自的UserContols中调度错误并修正错误来修复所有错误。但是,如果选项卡控件与不同选项卡中的其他控件链接在一起,则可能会遇到一些“问题”。

另一种方法是从逻辑上分离用户控件(日期/时间控件,文本控件,业务对象相关控件)。

但是,恐怕事件处理程序和其他你需要自己修复的东西。

1

你已经知道什么是错的,以及如何解决它:在小的,松散耦合的组件中打破一切,并使表单在一起工作。请参阅Model-View-Controller模式。也许最好为每个组件制作一个单独的控制器,然后大型控制器拥有自己的控制器来控制较小的控制器。这对体面的事件处理很重要:不要连接控制事件,而是控制器事件。

0

这样的修改可能应该在代码中完成,而不是在设计编辑器中完成。你自己说复制粘贴开始破坏事物:设计编辑器是为了创建设计/布局,但不适合处理背后的代码。

我建议你先将6个标签页拆分为6个不同的文件,然后将1个文件分配给实际的表单。然后快速查看代码并查看是否可以找到常见模式,无论是功能还是逻辑(即似乎重新出现的某些控件组或某些代码结构被大量使用)。提取它们,放入单独的类并应用于原始文件。一个典型的例子就是控制帽具有一定的风格并且被多次使用:应该得到一个管理风格的专用类/功能。

同时,记录您的步骤并保持测试功能。

也是非常重要的(你不要在你的问题中谈论它,但它可能存在)是你从底层数据结构/数据库/文件获取数据的方式。也许你应该从这个开始:为你的应用程序提供一个专用的,标准化的方式来处理数据和UI之间的通信,并使所有控件都使用它。如果您选择重构UI或数据库,或者两者兼而有之,如果您不必更改该通信逻辑,就会知道您做得正确。