none
Wie bei TextBox Eingabe nur bestimmte Zeichen zulassen? RRS feed

  • Frage

  • Wie kann man die zulässigen Eingabezeichen für eine TextBox festlegen? Ich habe eine TextBox die ausschließlich HEX-Werte einlesen können soll. Daher sollen nur Eingaben von Nummern (0..9) und Buchstaben (a..f) und (A..F) erlaubt sein. Wie macht man das am Einfachsten?

    Freitag, 26. November 2010 14:41

Antworten

Alle Antworten

  • Hallo Seppel der Programmierer,

    es gibt hier (ich nehme an du Programmierst Windows Forms) drei Möglichkeiten.

     

    Am einfachsten dürfte es sein, du verwendest eine MaskedTextBox anstelle einer "normalen" TextBox:

    (http://msdn.microsoft.com/de-de/library/1fkc1cz6.aspx)

     

    Solltest du bei einer TextBox bleiben wollen/müssen würde folgendes gehen:

    Du prüfst während der Eingabe. Dazu hängst du dich an das TextChanged Ereignis der TextBox:

    (http://msdn.microsoft.com/de-de/library/system.windows.forms.control.textchanged(v=VS.100).aspx)

     

    Oder du verwendest die Validierungsfunktionalität der TextBox.

    (http://msdn.microsoft.com/de-de/library/system.windows.forms.control.validating(v=VS.100).aspx)

     

    Ich hoffe ich konnte dir weiterhelfen. Ansonste frage bitte gezielt nach...

     

    Viele Grüße

    Holger M. Rößler

    Samstag, 27. November 2010 09:03
  • Danke Holger für die ausführliche Antwort. Ich habe etwas brauchbares erstellen können. Für alle die es interessiert, hier die Lösung:

    1) Die MaskedTextBox habe ich mir genauer angesehen. Über deren Mask-Eigenschaft kann man die Eingabe auch beschränken, z.B. auf Ziffern (0-9) oder auf Buchstaben (a-z,A-Z). Aber leider kann ich es nicht weiter einschränken, ich wöllte halt die Buchstaben (a-f,A-F) und die Ziffern (0-9) für jedes einzelne Feld zulassen. Wobei diese Verknüpfung von Ziffern und Buchstaben das zweite Problem darstellt. Kann man das der MaskedTextBox irgendwie beibringen? Meine bisherigen Versuche sind alle gescheitert. "Mask" ist halt wirklich nur eine Maske, die für IPs oder Email Adresseingaben super ist, da sie die "." oder "@" erkennt, aber für meinen Anwendungsfall anscheinend ungeeignet.

    2) Die Validierungsfunktionalität klang vom Namen her erstmal sehr gut. Nach etwas herum probieren bin ich auch zu einem Ergebnis gekommen. Die "CausesValidation" Eigenschaft meiner TextBox ist standardmäßig auf true, demnach erzeugt sie ein ValidationEreignis. Daher habe ich in den Ereignissen der TextBox das "Validating" Ereignis erstellt (Doppelklick ins freie Feld), um eine Methode zu erstellen in welcher die Eingabezeichen geprüft werden:

    Void Form1::tB_Hex2Dec_Validating(System::Object^ sender, System::ComponentModel::CancelEventArgs^ e)
    {
    //zulässige Zeichen
    array<wchar_t> ^hexcode = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','A','B','C','D','E','F'};

    if(!((tB_Hex2Dec->Text->IndexOfAny(hexcode,0,1) == 0 ) && (tB_Hex2Dec->Text->IndexOfAny(hexcode,1,1) == 1 )))
    {
    MessageBox::Show("Es sind nur HEX-Werte zulässig","Fehler");
    tB_Hex2Dec->Text = "00";
    l_Hex2Dec->Text = "00";
    tB_Hex2Dec->Focus();
    }
    }
    Ist vielleicht etwas umständlich, aber es funktioniert. Falls jemand Verbesserungsvorschläge hat, möge er sie kundtun. Das TextChanged Ereignis habe ich mir noch nicht angesehen.
    Montag, 29. November 2010 13:38