公司ERP系統(WINFORM)要搞個繁體版,供中國臺灣同胞使用。 為了簡便起見,寫了幾個方法,在Form_Load里調用。 核心的還是這一句:objControl.text = StrConv(objControl.text, VbStrConv.TraditionalChinese) 在簡體版W ...
公司ERP系統(WINFORM)要搞個繁體版,供中國臺灣同胞使用。
為了簡便起見,寫了幾個方法,在Form_Load里調用。
Public Sub TransControlTextToTraditionalChinese(ByRef tpInstance As Form)
tpInstance.Text = TransTextToTraditionalChinese(tpInstance.Text)
For Each objControl In tpInstance.Controls
If TypeOf (objControl) Is MenuStrip OrElse
TypeOf (objControl) Is ToolStrip OrElse
TypeOf (objControl) Is StatusStrip Then
TransControlTextToTraditionalChinese_Tool(objControl)
ElseIf TypeOf (objControl) Is FlowLayoutPanel Then
TransControlTextToTraditionalChinese_FlowLayoutPanel(objControl)
ElseIf TypeOf (objControl) Is Panel OrElse
TypeOf (objControl) Is GroupBox Then
TransControlTextToTraditionalChinese(objControl)
ElseIf TypeOf (objControl) Is TabControl Then
TransControlTextToTraditionalChinese_TabControl(objControl)
ElseIf TypeOf (objControl) Is DataGridView Then
TransControlTextToTraditionalChinese_DataGridView(objControl)
ElseIf TypeOf (objControl) Is TextBox OrElse
TypeOf (objControl) Is Label OrElse
TypeOf (objControl) Is Button OrElse
TypeOf (objControl) Is CheckBox OrElse
TypeOf (objControl) Is RadioButton Then
objControl.text = StrConv(objControl.text, VbStrConv.TraditionalChinese)
End If
Next
End Sub
核心的還是這一句:objControl.text = StrConv(objControl.text, VbStrConv.TraditionalChinese)
在簡體版Win7下運行良好。到了中文(臺灣)繁體版Win7下,直接成了亂碼了。
真是百思不得其解。
仔細研究了一下StrConv方法,還有第三個參數。
Public Function StrConv(str As String, Conversion As Microsoft.VisualBasic.VbStrConv, Optional LocaleID As Integer = 0) As String
查了MSDN也沒有結果,最後在網上查到了相關資料。
毛病就出這個LocaleID這個參數上,這個參數指的是轉換後的語言的代碼。
以下是我在網上搜索到的Windows下常用語言以及對應的代碼
語言 | 代碼 |
---|---|
中文(香港特別行政區) | 3076 |
中文(中國) | 2052 |
中文(臺灣) | 1028 |
英語(美國) | 1033 |
在Office及VS的安裝目錄都能看到2052這個目錄,代表的就是中文簡體。
那我們做一些測試。
TextBox1.Text = StrConv("我是中國人", VbStrConv.TraditionalChinese, 2052) '顯示我是中國人
TextBox2.Text = StrConv("我是中國人", VbStrConv.TraditionalChinese, 1028) '顯示亂碼 我是中?人
TextBox3.Text = StrConv("我是中國人", VbStrConv.TraditionalChinese, 1033) '顯示我是中國人
1028是Windows下的中文(臺灣)代碼。在轉換使用這個代碼表時,不是所有的中文簡體編碼值在繁體中都存在,所以就出現了?號。
而LocaleID預設為0也就是使用系統預設的,那在中文(臺灣)繁體版操作系統下這個就為1028.
所以出現了之前的那個亂碼的圖片。
那最好使用1033。代表英文en-US,當使用1033時,遇到中文時就會以Unicode來編碼。就不會出現簡繁轉換亂碼的問題。
最終把我的代碼改為了:
objControl.text = StrConv(objControl.text, VbStrConv.TraditionalChinese)