Vb.net 如何将microsoft.visualbasic.compatibility.vb6.format的区域性与application.currentCulture同步?

Vb.net 如何将microsoft.visualbasic.compatibility.vb6.format的区域性与application.currentCulture同步?,vb.net,compatibility,Vb.net,Compatibility,上下文:一个用VB.NET编写的程序,在VisualStudio2012中开发/维护,目标是framework v3.5 几年前,这个程序是用VB(6)编写的,我们把它“翻译”成VB.NET。由于转换大部分是自动化的,我们在代码中仍有相当多的地方处理文本表示的双精度(和日期/…)格式,如下所示: Dim sValue As String = Microsoft.VisualBasic.Compatibility.VB6.Format(dblValue, "0.00") 相反,当我们需要从这样的

上下文:一个用VB.NET编写的程序,在VisualStudio2012中开发/维护,目标是framework v3.5

几年前,这个程序是用VB(6)编写的,我们把它“翻译”成VB.NET。由于转换大部分是自动化的,我们在代码中仍有相当多的地方处理文本表示的双精度(和日期/…)格式,如下所示:

Dim sValue As String = Microsoft.VisualBasic.Compatibility.VB6.Format(dblValue, "0.00")
相反,当我们需要从这样的字符串中提取双精度值时,我们使用

Dim dblValue As Double = CDbl(sValue)
CDbl“侦听”应用程序线程的System.Globalization.CultureInfo.CurrentCulture,当您在代码运行期间通过控制面板更改区域设置时,这不会更改

但是,代码中执行的VB6.Format一开始符合应用程序的当前区域性(正如您所期望的),但显然(我不知道这一点,但意外发现)会侦听区域设置中的更改,并立即响应您在程序执行期间所做的任何更改。这意味着CDbl()和VB6.Format()变得相互不一致

当然,在程序执行过程中更改区域设置是不方便的,而且,如果您希望支持区域设置,可以通过捕获SystemEvents.UserPreferenceChanged(和-Changed)事件并根据事件的发生采取行动来管理区域设置

然而,VB6.FORMAT与“正常”的“不同行为”在文化/区域设置的变化方面被强制转换为CDbl(someString),这让我感到不受欢迎。您最好使用VB6.Format以始终符合应用程序/线程CurrentCulture,然后您可以选择希望代码响应用户首选项更改的方式。此外,我想在这个问题上获得更多的见解

因此,我的问题是: 有没有办法编译/排列/。。。(Microsoft.VisualBasic.Compatibility.)VB6.Format侦听应用程序CurrentCulture,并且在未经“我们同意”的情况下不对区域设置的更改做出响应

其他信息: 对于visualbasic内容,该程序在项目(VisualStudio2012)中包含以下参考: C:\Windows\Microsoft.Net\Framework\V2.0.50727\Microsoft.VisualBasic.Compatibility.dll(和…Data.dll)

欢迎提供任何“教育”信息或建议。这个问题并没有在我们的程序中造成任何实际问题,但我觉得我们应该/可能有更好的理解,甚至可能有更健壮的方法。

VB6 Format()函数实际上是一个隐藏在幕后的操作系统函数。VarFormat(),oleaut32.dll导出的函数。背景回答。MSDN库文章

从MSDN文章中可以看出,该函数不允许指定区域性或特定于区域性的设置,除了星期几规则之外。这个功能可以追溯到1996年,当时的生活要简单得多。因此,您现在看到的内容很容易解释,它对.NET Thread.CurrentCulture设置一无所知。

VB6 Format()函数实际上是一个隐藏的操作系统函数。VarFormat(),oleaut32.dll导出的函数。背景回答。MSDN库文章

从MSDN文章中可以看出,该函数不允许指定区域性或特定于区域性的设置,除了星期几规则之外。这个功能可以追溯到1996年,当时的生活要简单得多。因此,您现在看到的内容很容易解释,它无法了解有关.NET Thread.CurrentCulture设置的任何信息。

谢谢Hans,足够清楚(尽管不是我所希望的-;)。我错过了先前的帖子(你的背景回答),很抱歉我被解雇了。顺便说一句,我们将从代码中删除所有VB6.Format的内容,以彻底解决这个问题。谢谢Hans,足够清晰(虽然不是我希望的-;)。我错过了先前的帖子(你的背景回答),很抱歉我被解雇了。顺便说一句,我们将从代码中删除所有VB6.Format的内容,以彻底解决这个问题。