Wenn ich Textboxen in vb.net validiere, benutze ich normalerweise die .Chr oder .ChrW Funktion, um die gültigen Bereiche von ASCII Werten zu definieren, die eingegeben werden können. Heute stieß ich auf etwas, was ich vorher nicht tun musste, wo ich diese Funktion im Format e.KeyChar <> Chr(156)
verwenden musste, aber den Wert 156 durch den Wert für das GBP-Zeichen ersetzen, oder abervb.net Chr KeyPress Funktion
online über ASCII-Tabellen, dass der ASCII-Wert 156 ist, lief ich den Code, und es würde mich nicht ein £ eingeben. Was ist die Lösung dafür? Gibt es etwas, das mir fehlt?
Private Sub txtFVal_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtFVal.KeyPress
If e.KeyChar <> Chr(156) AndAlso e.KeyChar <> Chr(46) AndAlso e.KeyChar <> Chr(44) AndAlso e.KeyChar = ChrW(Keys.Oemcomma) _
AndAlso (e.KeyChar < Chr(48) OrElse e.KeyChar > Chr(57)) AndAlso e.KeyChar <> Chr(8) Then
e.Handled = True
End If
End Sub
Es ist nur 156 in Codepage 437, die Legacy-OEM-Codepage, die in Konsolen verwendet wird. Die Chr() -Funktion setzt voraus, dass Sie Codes in der alten Windows-Codepage angeben (normalerweise 1252 in Westeuropa und Amerika), 163. Die Lektion, die Sie hier gelernt haben, ist so weit von dieser Codepage entfernt, wie Sie können() und verwende immer Unicode. Was macht es ChrW (& HA3) oder die vernünftig und lesbar '£ c' –
@HansPassant Okay, so nahm ich' e.KeyChar <> Chr (156) 'und fügte' AndAlso e.KeyChar = ChrW (& HA3) 'bis zum Ende - Immer noch nichts passiert? No £ wird angezeigt ... Brauche ich auch die Umschalttaste? – David
Welchen Schlüssel drücken Sie eigentlich? Wenn Sie einen Haltepunkt für den Ereignishandler setzen, geben Sie den Schlüssel ein und prüfen Sie e.KeyChar mit dem Debugger. Was sehen Sie? –