2016-08-08 14 views
0

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 
+0

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' –

+0

@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

+0

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? –

Antwort

0

statt, dessen ASCII-Nummer Nachschlag nur die Zeichen selbst festlegen, indem Sie einen String mit c suffixing - die in VB.NET zeigt an, dass Sie eine char Literal angegeben haben:

If e.KeyChar <> "£"c AndAlso ... 

EDIT:

Hier ist eine saubere If -Anweisung, sehen, ob es funktioniert:

If Char.IsNumber(e.KeyChar) = False AndAlso e.KeyChar <> "£"c _ 
    AndAlso e.KeyChar <> ","c AndAlso e.KeyChar <> "."c _ 
    AndAlso e.KeyChar <> Chr(8) Then 
    e.Handled = True 
End If 
+0

Hallo Vincent, das scheint immer noch nicht das £ -Symbol in meine Textbox auszugeben? – David

+0

@David: Vielleicht bewerten nicht alle deine Ausdrücke True? Zum Beispiel scheint das nicht richtig zu sein: 'AndAlso e.KeyChar = ChrW (Keys.Oemcomma)'. Plötzlich überprüfen Sie, ob das Zeichen ein Komma ist (oder was auch immer es ist). –

+0

Auch nachdem ich diese Zeile entfernt habe (die ich verwendete, um Kommas einzufügen), wird sie nicht angezeigt. Ich habe auch versucht, von "AndAlso" zu "OrElse" zu wechseln. – David