我已经在一个旧的VB6项目中创建了一个COM VB.NET(VS2013下的v3.5)usercontrol。控件与其VB6主机通信就好了。它按预期工作,打开数据库,读/写东西。一切都没关系,除了一件事,我不确定它是什么。似乎我不能正确地将其字体(?)或其语言(?)设置为希腊语,以便能够在包含的文本框中键入希腊字符。
此usercontrol包含其他几个.NET控件。列表框,按钮和文本框。我从DB读取内容,将所有这些控件的text属性设置为数据库的内容,并正确显示希腊语。如果我尝试将O / S语言切换为希腊语并在文本框中键入内容,则会显示奇怪的字符而不是正确的希腊字符(我假设来自另一个代码页)。我已经以编程方式将其字体更改为" [字体:名称= Arial,大小= 9,单位= 3,GdiCharSet = 161,GdiVerticalFont = False]"。 GdiCharSet = 161是希腊语。它应该工作。它确实可以在.NET环境中或测试.NET exe中运行。我可以在文本框中键入希腊语。当我尝试在VB6程序中使用它时,似乎切换到希腊语并且输入希腊语字符是不可能的。从DB加载希腊语并显示它们是没有问题的。
我也尝试将GdiCharSet设置为0,1,2(是的,它确实按预期显示了符号)并更改了usercontrol构造函数中的文化但没有运气:
System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("el-GR")
System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("el-GR")
任何人的想法,检查/尝试的内容?
答案 0 :(得分:-1)
Private Sub txtMessage_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMessage.KeyPress
If InputLanguage.CurrentInputLanguage.Culture.Equals(New Globalization.CultureInfo("el-GR")) Then
FixKeyChar(e)
End If
End Sub
Public Sub FixKeyChar(ByRef e As KeyPressEventArgs)
Dim myUnicodeBytes As Byte() = Encoding.Unicode.GetBytes(e.KeyChar)
Dim myUTF32Bytes As Byte() = Encoding.Convert(Encoding.Default, Encoding.UTF32, myUnicodeBytes)
e.KeyChar = ChrW(myUTF32Bytes(1) * 256 + myUTF32Bytes(0))
End Sub
我希望它能证明对其他一些可怜这些东西的人有所帮助......