2016-06-07 28 views
-1

Ich habe eine COM VB.NET (v3.5 unter VS2013) usercontrol erstellt, die ich in einem alten VB6-Projekt enthalten habe. Die Steuerung kommuniziert mit ihrem VB6-Host einwandfrei. Es funktioniert wie erwartet, öffnet die DB, liest/schreibt Zeug. Alles ist in Ordnung außer einer Sache, von der ich nicht sicher bin, was es ist. Es scheint, dass ich weder seine Schriftart (?) Noch seine Sprache (?) Korrekt auf Griechisch setzen kann, um griechische Zeichen in einer enthaltenen Textbox eingeben zu können..NET COM usercontrol setzt Schriftart oder Sprache nicht richtig

Diese Benutzersteuerung enthält mehrere andere .NET-Steuerelemente. Listboxen, Schaltflächen und Textfelder. Ich lese Sachen von DB, setze die Texteigenschaft aller Kontrollen auf den Inhalt der Datenbank und Griechisch werden richtig gezeigt. Wenn ich versuche, die O/S-Sprache auf Griechisch umzuschalten und etwas in eine Textbox einzugeben, werden seltsame Zeichen anstelle der richtigen griechischen angezeigt (ich nehme an, dass es sich um eine andere Codepage handelt). Ich habe seine Schriftart programmatisch in "[Schriftart: Name = Arial, Größe = 9, Einheiten = 3, GdiCharSet = 161, GdiVerticalFont = False]" geändert. GdiCharSet = 161 ist Griechisch. Es sollte funktionieren. Und es funktioniert von innerhalb der .NET-Umgebung oder von einer Test-.NET-Exe. Ich kann Griechisch in das Textfeld eingeben. Wenn ich versuche, es aus dem VB6-Programm zu verwenden, scheint es, auf Griechisch zu wechseln und griechische Zeichen einzugeben ist nicht möglich. Griechisch von DB zu laden und sie zu zeigen ist kein Problem.

Ich habe auch versucht GdiCharSet 0, 1, 2 (yup, es Zeigte Symbole wie erwartet) und ändern, um die Kultur in dem Usercontrol-Konstruktor aber kein Glück Einstellung:

System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo("el-GR") 
System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("el-GR") 

Alle Ideen jemand, was zu prüfen/versuchen?

+0

vergessen zu erwähnen: die Lage, Systemgebietsschema und alles andere (Formate) im PC eingestellt ist Griechisch. – FaultyOverflow

+0

Zusätzliche Informationen: es scheint, dass MsgBox (e.KeyChar & "-" & Asc (e.KeyChar)) und MsgBox (e.KeyChar & "-" & AscW (e.KeyChar)) innen Das KeyPress-Ereignis der Textbox erzeugt unter der .NET-Test-Exe andere Ergebnisse als die VB6-Exe. – FaultyOverflow

+0

Sie konzentrieren sich auf das falsche Problem, das aktive Tastaturlayout ist aus irgendeinem Grund falsch. Uns nicht zu sagen, wo du wohnst, und nicht zu zeigen, was du tippst und welche Charaktere das hervorbringt, hilft uns nicht, dir zu helfen. Sehen Sie sich die System.Windows.Forms.InputLanguage.CurrentInputLanguage-Eigenschaft an. –

Antwort

-1

Wow ... Nach mehr Stunden, als ich in dieser Angelegenheit sparen konnte, habe ich endlich eine Lösung gefunden.

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 

Ich hoffe, es erweist sich mit diesen Dingen verwirren für einige andere arme Seele hilfreich sein ...