Foxtable(狐表)用户栏目专家坐堂 → [分享]标点符号修改之委曲求全


  共有12108人关注过本帖树形打印复制链接

主题:[分享]标点符号修改之委曲求全

帅哥哟,离线,有人找我吗?
qtcks
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
[分享]标点符号修改之委曲求全  发帖心情 Post By:2010/8/30 22:37:00 [只看该作者]

查阅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()

 

附录代码:

以下内容为程序代码:

1 项目事件
2
3 BeforeOpenProject
4
5 System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
6 System.Globalization.CultureInfo.CreateSpecificCulture("it-IT").NumberFormat
7
8 MainTableChanged
9
10 System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
11 System.Globalization.CultureInfo.CreateSpecificCulture("it-IT").NumberFormat
12
13 CurrentTableChanged
14
15 System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
16 System.Globalization.CultureInfo.CreateSpecificCulture("it-IT").NumberFormat
17
18 AfterSaveProject
19
20 System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
21 System.Globalization.CultureInfo.CreateSpecificCulture("en-US").NumberFormat
22 Syscmd.Project.Save()
23
24 计划管理
25
26 表事件
27
28 窗口表事件
29
30 窗口与控件事件
31
32 窗口1_AfterLoad
33
34 System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
35 System.Globalization.CultureInfo.CreateSpecificCulture("it-IT").NumberFormat
36
37 窗口1_BeforeClose
38
39 System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
40 System.Globalization.CultureInfo.CreateSpecificCulture("en-US").NumberFormat
41
42 窗口1_Enter
43
44 System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
45 System.Globalization.CultureInfo.CreateSpecificCulture("en-US").NumberFormat
46
47 窗口1_Leave
48
49 System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
50 System.Globalization.CultureInfo.CreateSpecificCulture("it-IT").NumberFormat
51
52 自定义函数
53
54 全局代码
55
56 菜单事件
57
58
59

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目.rar


 回到顶部
帅哥哟,离线,有人找我吗?
qtcks
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
  发帖心情 Post By:2010/8/30 22:40:00 [只看该作者]

打开项目之前

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段代码就可以搞定了。

 

通过这个方法,还是在窗口应用中,编辑模式与查看模式中来切换,顺从用户的输入习惯。呵呵。

[此贴子已经被作者于2010-8-30 22:41:51编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/8/30 22:57:00 [只看该作者]

你很狡猾

图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
czy
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/8/30 23:07:00 [只看该作者]

白天我倒是测试过,我还是用了lxl的方法,估计效果和楼主的也差不多。

 

'AfterOpenProject事件代码
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator= ","

 

'BeforeCloseProject事件代码
System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator= "."
Syscmd.Project.Save()

[此贴子已经被作者于2010-8-30 23:07:15编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
qtcks
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
  发帖心情 Post By:2010/9/22 0:05:00 [只看该作者]

以下是引用qtcks在2010-8-30 22:40:00的发言:

打开项目之前

System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat = _
System.Globalization.CultureInfo.CreateSpecificCulture("it-IT").NumberFormat

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图未命名.png
图片点击可在新窗口打开查看
label 标签字体变大了。郁闷哦。

 回到顶部
帅哥哟,离线,有人找我吗?
qtcks
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:485 积分:3926 威望:0 精华:6 注册:2009/3/29 13:25:00
  发帖心情 Post By:2011/2/22 13:57:00 [只看该作者]

通过

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


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/2/22 14:29:00 [只看该作者]

呵呵,在全局代码中加上:

 

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


 回到顶部