***gelöst*** Cursor nach hinten stellen?



  • hallo,

    ich habe da ein kleines Problem, ich möchte vor der try/catch Prüfung prüfen ob ein "," als erstes Zeichen geschrieben wurde und wenn JA, dann soll eine Null vorgestellt werden, was auch super Funktioniert.
    Nur stellt sich der Cursor nicht ans Ende sondern er bleibt vor der Null stehen.

    ι,0

    damit ist dann die Eingabe auch wieder "Flasch"
    der Curser sollte schon am Ende stehen

    0,ι

    gibt es eine Möglichkeit (Befehl) diesen ans Ende zu stellen??

    Ziel ist es bei der Eingabe "Fehleingaben" zu blocken, aber trotzdem bei Eingabe von ",25896" dieses als Zahl zu interpretieren.

    hier der Quellcode

    private: System::Void textBoxZahl1_TextChanged(System::Object^  sender, System::EventArgs^  e) {
    				 String ^StringLesen;
    				 StringLesen = textBoxZahl1->Text;
    				 //ControlAnzeige zum Testen
    				 //labelPruefen->Text = StringLesen;
    
    				 if (StringLesen[0] == ','){
    					 StringLesen = StringLesen->Insert(0,"0"); 
    					 textBoxZahl1->Text = StringLesen;
    				 }
    
    				 double zahl1;
    				 if (textBoxZahl1->Text != " "){
    					 try{
    						 zahl1=Convert::ToDouble(textBoxZahl1->Text);
    					 }
    					 catch(...){
    						 MessageBox::Show("Ihre Eingabe ("+ textBoxZahl1->Text + " ) war nicht gültig.", "Fehler");
    					 }
    				 }
    			 }
    

    oder kann man die Prüfung auch anders durchführen?

    mfg



  • Ich würde die Abfrage in Key_Press packen.
    So kannst Du die Sache mit dem Komma und der Null lösen...

    private: System::Void textBox1_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) 
    			 {
    				 if(textBox1->Text == String::Empty && e->KeyChar == ',')
    				 {
    					 e->Handled::set(true);//Eingabe nicht ausgeben:
    					 textBox1->Text += "0," + textBox1->Text;//Text übergeben:
    					 textBox1->SelectionStart::set(textBox1->TextLength);//Einfügmarke an letzter Position setzen:
    				 }
    			 }
    

    Aber witzig wird es, wenn der User zwei Kommata eingibt.
    Solltest Du vielleicht noch abfangen.

    Gruß,

    Doug_HH



  • Prüf doch intern ob vor die Zahl ein Komma enthält, ist das der Fall prüfst du ob vor dem Komme ein Zeichen steht.

    Wenn das nicht der Fall ist hängst du einfach an den Anfang der Zahl eine 0. - So würde ich es jedenfalls machen. (Ausgeben kannst du die Zahl dann ja auch fertig formatiert.)

    Oder eben eher oben genannter Weg der wie ich meine besser ist.



  • hi,

    Danke für die Tipps,

    jetzt funzt es 😋 👍

    textBox1->SelectionStart::set(textBox1->TextLength);
    

    war mir nicht bekannt, wieder was gelernt 💡

    wobei ich es in der "Changed" Abfrage gelassen habe, diese wird ja auch ausgelöst, wenn sich etwas ändert.

    wobei ich den genauen Unterschied zwischen "changed" und "KeyPress" nicht kenne

    vll kann da einer noch mal was zu sagen ➡

    ein zweites Komma wird als Fehler angesehen da es ja nicht an erster Stelle im String steht, so Prüfe ich ja nur das erste Zeichen um kein Fehler in der Fehlerroutine auszulösen,

    besten Dank

    ***Gelöst***



  • Hallo,

    wobei ich den genauen Unterschied zwischen "changed" und "KeyPress" nicht kenne

    vll kann da einer noch mal was zu sagen

    einfach nachlesen:

    KeyPress Tritt ein, wenn eine Taste gedrückt wird, während das Steuerelement den Fokus hat. (Von Control geerbt.)

    TextChanged Tritt ein, wenn sich der Text-Eigenschaftenwert ändert. (Von Control geerbt.)

    Das ist doch ein deutlicher Unterschied. Mit KeyPress kann man, vor allem in Kombination mit den anderen Key...-Ereignissen, schon vorher, "auf niedrigerer Ebene", eingreifen, weil TextChanged erst später ausgelöst wird. Tastendrücke kann man so noch abfangen, bevor sie das Steuerelement erreichen.

    MfG

    Probe-Nutzer


Anmelden zum Antworten