公司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, 1033)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/4954.html
標籤:Windows
上一篇:IDEA中安裝SVN
