C# Textbox - Eingabe einschränken

eightcore

Lt. Commander
🎅Rätsel-Elite ’24
Registriert
Juli 2008
Beiträge
1.656
Guten Tag.

Ich habe eine Textbox, in der man später verschiedene Laufwerksbuchstaben eintragen kann (das Programm wird bei einzelnen Laufwerken die automatische Wiedergabe deaktivieren können), eine Eingabe kann z.B. so aussehen: C, D, E, F oder C,D,E,F oder CDEF.

Mein erstes Problem: Wie kann ich einschränken, dass nur alle Buchstaben, Komma und Leertaste registriert werden?

Die Buchstaben-Filterung habe ich eigentlich schon:

Code:
                if ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".IndexOf(e.KeyChar.ToString()) < 0)
                { e.Handled = true; }

                else
                {
                    e.Handled = false;
                }

Nun sollte eben noch die Leertaste und das Komma freigeschaltet werden können.



Das zweite Problem: Wenn ich den Filter oben verwende, müssen Grossbuchstaben eingegeben werden, was eigentlich gut ist, nur möchte ich, dass automatisch gross geschrieben wird, ohne dass man Shiften oder Capslocken muss.



MfG | eightcore
 
Filtern kannst du mit Regex

Großschreiben kannst du, indem du im TextChange-Eventhandler einfach die toUpper Methode aufrufst.

PS: obwohl das mit den Großbuchstaben überflüssig ist, wenn du Regex verwendest.
 
Also fürs großschreiben gibts eine funktion toUpper Methode, die Quasi alle Buchstaben in das Großgeschriebene derivat verwandelt.

wegen der leertast und dem komma, da gibts den enum Keys, welcher zb einen Eintrag Space enthält. mit dem kannst dann vergleichen.

hoffe das passt so, habs eigentlich nur schnell ausm google.
 
Hallo Eightcore,

ja und sofern ich das richtig im Kopf habe gibt es dafür zwei Methoden:

1. Die MaskedTextbox - In der Toolbox zu finden. Finde ich aber nicht so schön, wegen den Masken.

und die 2te, und in meinen Augen besser Methode:

Die fügst einen eventHandler zu dem KeyPress - Event hinzu und überprüfst darin welcher Knopf gedrückt wurde. Je nachdem welcher, lässt du dann die Eingabe zu oder halt nicht.

Und dann würde ich einen EventHandler zum TextChanged -Event hinzufügen und dort imemr prüfen ob der Text einem gültigen Laufwerksbuchstaben entspricht.


Gruß,
TheOtherSide


PS: Wenn du möchtest kann ich dir zum 2ten auch den SourceCode mal hier reinschreiben.


EDIT: Die Methoden von meinen beiden Vorredner sind natürlich auch nicht schlecht. Hab daran gar nicht gedacht.
 
public static Boolean checkIfInputIsNumber(KeyEventArgs e)
{
if (('0' <= e.KeyValue && e.KeyValue <= '9') || (96 <= e.KeyValue && e.KeyValue <= 105))
{
return true;
}
return false;
}

private void tbNoSys_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = !checkIfInputIsNumber(e);
}
Damit würdest du nur noch Tastatur-Anschläge durchleiten, welche ein Zahl beinhalten.
Als event würd ich ein KeyDown-Event nehmen.
So verhinderst du, das falsche Eingabe in der TextBox landen.
Musst du dir halt entsprechen umschreiben ;)

Grüße
Sören
 
Zurück
Oben