Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
查阅N多资料,终于找到一变通方法来实现全球化区域性的信息的应用
案例:由于客户在欧洲,其数值的小数点字符与分组字符与中国的正好相反。(之前的方案BUG也是由小数点修改后引起的崩溃)
如表示十万零八百九十七点二五六
zh-CN: 100,097.256
我的客户需要显示为:100.097,256
正好相反。
根据以上情况,整体思路,还是调用操作系统的不同国家区域语言设置。
System.Globalization.CultureInfo.CreateSpecificCulture("en-US") '调用英语-美国
System.Globalization.CultureInfo.CreateSpecificCulture("it-IT") '调用意大利-意大利
国家代码可以参考:http://msdn.microsoft.com/zh-cn/library/system.globalization.cultureinfo(VS.80).aspx
设置当前程序的区域语言为
System.Threading.Thread.CurrentThread.CurrentCulture
这里重点警告一下,用到区域语言的哪个部分,就调用哪个部分。
我之前的实验就犯了这个错误,导致事件代码无法编辑。
在这个案例中,由于操作的人还是华人,所以,只用到它的数值显示一块。
具体的代码如下。
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
System.Globalization.CultureInfo.CreateSpecificCulture("it-IT").NumberFormat
白话文解释:设置当前程序的区域语言,数值部分 =系统区域语言中,意大利语,数值部分。
好了,到这里为止,其实就是前天犯错的步骤。
那么接下来就要在项目保存的时候,
将这些设置还原。
如果不还原,导致的后果,就是版本无法打开。
我在保存项目事件中,设置如下代码
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
System.Globalization.CultureInfo.CreateSpecificCulture("en-US").NumberFormat '切换会英文模式
Syscmd.Project.Save()
附录代码:
下载信息 [文件大小: 下载次数: ] | |
![]() |
打开项目之前
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
System.Globalization.CultureInfo.CreateSpecificCulture("it-IT").NumberFormat
‘=============================
保存项目之后
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
System.Globalization.CultureInfo.CreateSpecificCulture("en-US").NumberFormat
Syscmd.Project.Save()
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
System.Globalization.CultureInfo.CreateSpecificCulture("it-IT").NumberFormat
这2段代码就可以搞定了。
通过这个方法,还是在窗口应用中,编辑模式与查看模式中来切换,顺从用户的输入习惯。呵呵。
你很狡猾
白天我倒是测试过,我还是用了lxl的方法,估计效果和楼主的也差不多。
'AfterOpenProject事件代码
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator= ","
'BeforeCloseProject事件代码
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator= "."
Syscmd.Project.Save()
打开项目之前
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
System.Globalization.CultureInfo.CreateSpecificCulture("it-IT").NumberFormat
通过
DrawCell 绘制单元格 来实现数据的多语言格式化。完美解决。
If e.Col.Name = "第二列" Then
If e.Row.IsNull(e.Col.Name) = False
Dim nfi As System.Globalization.NumberFormatInfo = New System.Globalization.CultureInfo("it-IT", False).NumberFormat
nfi.CurrencyGroupSeparator = "."
e.text = Convert.ToDouble(e.text).ToString("c", nfi)
End If
End If
呵呵,在全局代码中加上:
Public nfi As System.Globalization.NumberFormatInfo = New System.Globalization.CultureInfo("it-IT", False).NumberFormat
Sub New
nfi.CurrencyGroupSeparator = "."
End Sub
DrawCell事件改为:
If e.Col.Name = "第二列" Then
If e.Row.IsNull(e.Col.Name) = False
e.text = Convert.ToDouble(e.text).ToString("c", nfi)
End If
End If