Mal ne dumme Frage



  • Benutze Visual C++

    Ich habe folgendes Problem und zwar wie kann ich bei der Eingabe vermeiden dass statt zahlen auch buchstaben eingegeben werden?

    Oder wie kann man beim datentyp int Zahl oder Zeichen unterscheiden

    so wenn der Benutzer unzuverlässigerweise ein Zeichen eingibt anschließend einen Fehlermeldung bekommt ??



  • Hi ITNerd,

    ich gehe mal davon aus, dass Du in einer WindowsForms-Anwendung arbeitest und nicht in einer Console.
    Da gibt es zum einem die Möglichkeit die "maskedTextBox" zu benutzen.

    http://www.rb-softarticle.com/TextBox.html

    Diese Variante halte ich für eleganter, da der Benutzer gar keine falschen Zeichen eingeben kann.

    Dann gibt es noch die zweite Möglichkeit, den "Eingabe-Fehler" durch einen try-catch Block abzufangen...

    int zahl1;
    
    try
    {
    	zahl1 = Convert::ToInt32(textBox1->Text);
    }
    
    catch(Exception^ ex)
    {
    	MessageBox::Show(ex->Message,"Fehler",MessageBoxButtons::OK,MessageBoxIcon::Exclamation);
    }
    

    Gruß, Doug_HH



  • Hm...

    meiner Meinung nach ist hier eine MaskedTextbox total fehl am Platz! Die Gründe sind einfach:

    a) hässlicher Strich
    b) keine freien Eingaben der Stellen

    Ich würde eine MaskedTextbox nur verwenden wenn ich eine ganz spezielle Eingabe benötige und der Anwender Visualisiert bekommen soll welche Eingaben zu erfolgen haben.

    Die eigentliche Lösung ist mehr ein Zweizeiler:

    private: System::Void textBox1_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) 
    			 {
    				 if(!System::Char::IsDigit(e->KeyChar))
    					 e->Handled = true;
    			 }
    


  • Ich finde eigentlich die TryParse-Methode der einzelnen Datentypen sehr gut.

    z.B.

    ...
    string text = textBox1->Text;
    Int32 wert;
    //prüft auf int und liefert true oder false und 
    //kopiert den text als int in die int Variable
    if(Int32::TryParse(text, wert))
    {
    ...
    }
    

    Kann man z.B. schön in den TextChanged Event einer Textbox einbauen



  • Mann kann auch einfach überprüfen ob der ASCII-Wert aller Zeichen des Strings zwischen 48 und 57 (inkl. der Grenzen) liegt, wenn ja entspricht der String einer (Ganz-)Zahl.


Log in to reply