上下文:用VB.NET编写的程序,在VisualStudio2012中开发/维护,目标是框架v3.5。
几年前,该程序在VB(6)中,我们将其“翻译”为VB.NET。由于转换主要是自动化的,我们在代码中仍然有很多地方处理文本表示的双精度(和日期/ ...)的格式,如下所示:
Dim sValue As String = Microsoft.VisualBasic.Compatibility.VB6.Format(dblValue, "0.00")
相反,当我们需要从这样的字符串中提取Double值时,我们使用
Dim dblValue As Double = CDbl(sValue)
CDbl“侦听”应用程序线程的System.Globalization.CultureInfo.CurrentCulture,并且在代码运行期间 - 通过控制面板更改区域设置时,这不会更改。
然而,在代码中执行的VB6.Format开始符合应用程序的currentCulture(正如您所料),但显然(我不知道这一点,但意外地发现)听取了在区域设置,并立即响应您在程序执行期间所做的任何更改。这意味着CDbl()和VB6.Format()变得相互矛盾。
当然,在程序执行期间更改区域设置很尴尬,而且,如果您希望支持它,您可以通过捕获SystemEvents.UserPreferenceChanged(和-Cnging)事件来管理它,并根据它们的发生进行操作。
然而,VB6.FORMAT与“普通”的“不同行为”被视为关于文化/区域设置变化的CDbl(someString),这让我觉得不可取。最好让VB6.Format始终遵守应用程序/线程 - CurrentCulture,然后您可以选择希望代码如何响应用户首选项更改。此外,我想在这个问题上获得更多的见解。
因此,我的问题是: 有没有办法编译/安排/ ...这样的事情(Microsoft.VisualBasic.Compatibility。)VB6.Format监听应用程序-CurrentCulture而不回复 - 没有“我们的同意” - 区域设置的变化?< / p>
其他信息: 该程序编译为 - 对于visualbasic东西 - 项目中的引用(VisualStudio2012): C:\ Windows \ Microsoft.Net \ Framework \ V2.0.50727 \ Microsoft.VisualBasic.Compatibility.dll(和... Data.dll)。
欢迎任何“教育”信息或建议。这个问题并没有在我们的程序中引起任何实际问题,但我觉得我们应该/可能有更好的理解,甚至可能使方法更加健壮。