0

我正在开发一个包含一些表单和控件的 winforms 项目。每一个都被翻译成 4 种语言。有一种名为“PropertiesForm”的表单要维护是一场噩梦:它有一个包含 6 个选项卡页的选项卡容器,其中包含一百多个控件,脏代码试图(并且经常失败)以保持整个事情的连贯性。

由于我负责这个项目,所以我尽量避免对这个表格做大的修改,但现在已经不可行了。做出大的改变将是困难和缓慢的,并且可能会导致稳定性问题。那么,恢复干净易懂的代码的最佳方法是什么?

我的想法是为每个标签页至少制作一个控件,并在表单中同步它们。我的问题是我不知道任何简单的方法可以用 Visual Studio 做到这一点。由于复制粘贴使它们消失,是否有任何自动方法可以将翻译和事件处理程序保留在新控件中?是否有为此任务设计的任何工具或插件?

在不破坏一切的情况下清洁结构的方法应该是什么?

4

3 回答 3

1

您已经知道出了什么问题以及如何解决它:将所有内容分解为小的、松散耦合的组件,并使表单一起工作。

看看模型-视图-控制器模式。也许为每个组件制作一个单独的控制器是个好主意,然后大窗体有自己的控制器来控制较小的窗体。这对于体面的事件处理很重要:不要连接控制事件,而是连接控制器事件。

于 2009-12-22T09:58:37.450 回答
1

据我所知,目前还没有这样的工具,也不知道应该有什么原则。

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

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

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

于 2009-12-22T10:02:09.690 回答
0

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

我建议您首先将 6 个标签页分成 6 个不同的文件,以及 1 个用于实际表单的文件。然后快速浏览一下代码,看看是否可以找到通用模式,无论是功能模式还是逻辑模式(即某些控件组似乎重新出现,或者某些代码结构被大量使用)。提取它们,放置在单独的类中并应用到原始文件中。一个典型的例子是一个控制帽应用了某种样式并且被多次使用:应该有一个专门的类/函数来管理样式。

同时,记录您的步骤并继续测试功能。

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

于 2009-12-22T10:06:25.310 回答