【发布时间】:2015-04-17 13:02:51
【问题描述】:
我的公司安排我执行一项紧急项目,将我们现有的一个程序从 VB6 更新到 VB.Net。这发生在两个阶段,我个人认为第一个阶段是浪费时间,但坚持这样做,是使用 Visual Studio 中的转换过程,然后清理错误以获得编译版本。该程序的规模很大,但由于我目前没有发言权,因此我正在尝试解决数百个编译器错误。我确实意识到我正在做的不是最佳实践,而且是一种非常令人沮丧的情况/浪费时间。
基本上有多种形式,其中一种可以调用任意数量的其他形式,这由 If 语句决定。加载表单后,新表单中的变量将被分配并打开。一些变量通常被命名,而另一些则不是。所以在 VB6 代码中它看起来像这样:
Dim frm As System.Windows.Forms.Form
If x=y Then
frm = New frm1
frm.Variable1 = "VarA"
frm.Variable2 = "VarB"
Else
frm = New frm2
frm.Variable3 = "VarC"
frm.Variable4 = "VarD"
End If
frm.Variable5 = "VarE"
我曾尝试在 If 语句中放置一个单独的表单对象,但由于在它之外也需要它们,它并不能真正解决问题,而且由于通用项目在其他方面被大量使用,它不会在单独的作业中复制它们是不切实际的。
我希望有一个快速的解决方案
frm.Var("Variable1") = "VarA"
但我找不到任何可以在如此大量的条件下简单实现的东西。
很抱歉没有鼓励最佳实践,因为我确实意识到任何解决方案都不会是这样,但我正在寻找最快的实现,以便我可以继续重写整个程序。
【问题讨论】:
-
这些表单不能在它们的构造函数中自己设置这些属性,或者让它们作为构造函数参数提供吗?
-
一个辅助类,它接受一个表单引用和一个名称值对的 IDictionary,并使用反射键找到成员,然后从值中设置它们?
-
我曾考虑过像临时表单或类这样的东西,但是对于我需要实现的大量更改和位置,这将使它成为一个如此重大的变化,我试图避免直到我可以进入重写阶段。对于范围的概念,仅针对此问题返回的错误数量就超过了 VS 限制(这是一项非常令人沮丧的任务)。