Integer Eingabefeld leeren



  • Hab da mal wieder Fragen.
    Wie kann ich das einstellen, das er nicht sofort beim Start des Programms prüft ob ein richiger Integerwert im EIngabefeld ist und bei einem falschen Wert meckert, sondern erst wenn das Feld benutzt wird? Es handelt sich um ein Eingabefeld, das nur Zahlenwerte zwischen 1900 und 2100 erlauben soll.

    Und wie kann ich das Feld leeren, wenn ich eingestellt habe, dass es nur Zahlen zwischen 1900 und 2100 haben darf? So das das Feld halt trotzdem blank ist?

    m_intZahl = " ";

    funktioniert nicht



  • schon mal CEdit::Clear versucht ?

    m_edit.Clear();
    	UpdateData(false);
    

    Devil



  • Das Klappt bei mir nicht, dann sagt er der Linke Teil von CLear müsste eine Klasse/Union etc sein... 😞



  • hast du auch richtigschreibung beachtet?

    also es MUSS Clear() heissen und nicht CLear, und nicht m_edit, sondern der name deiner member variable.



  • Du must eine CTRL - Membervariable auf die Editbox erstellen.

    Devil



  • Also richtig geschrieben habe ich es und auch meine Variablennamen angepasst.
    Allerdings hab cih es als Wert Variable angelegt mit einem integer anstatt einer CTRL Varialbe, weil so kann ich einstellen in welchem Bereich die Zahl liegen soll und das es überhaupt eine Zahl sein soll.

    Kann cih das Feld auch leeren, wenn die Variable WERT ansttt CTRL ist?



  • Du kannst auf jedes Editfeld 2 Variablen anlegen:
    Eine für den Inhalt (CString, int usw.) und eine
    um das Editfeld selber zu steuern.

    Devil



  • Aso wusste ich nicht. Klappt allerdings imemr noch nicht.

    ich benutze das nun so: m_ctlZahl.Clear();

    DIe Zahl bleibt allerdings trotzdem stehen auch wenn cih UpdateData(FALSE); mache....

    Wo könnte das Problem sein?



  • m_ctlZahl ist vom Typ CEdit ?

    Devil



  • Ja und trotzdem geht es leider nicht



  • ExtremeSnail schrieb:

    Ja und trotzdem geht es leider nicht

    Zeig mal deinen Code...

    Devil



  • void CListview_testDlg::OnBtnsuchen() 
    {
    	UpdateData(TRUE);
    	m_ctlList.DeleteAllItems();
    
    	m_ctlZahl.Clear();	
    	UpdateData(FALSE);
    

    usw. der Rest ist unwichtig, es soll nach dem drücken des Buttons das EIngabefeld geleert werden.
    Der Compiler spuckt keinen Fehler aus und alles davor udn danach geht auch wudnerbar nur das Leeren nicht 😞



  • Also bei mir klappt es. Ka wo bei dir der Fehler liegt.
    Der Code ist so korrekt...

    Devil



  • Am Anfang steh im EIngabefeld eine 0 wenn cih nun 50 eintrage udn den Button klicke bleibt es allerdings eine 50 anstatt leer also " " zu werden, Mensch weiso cih plan das nicht zum heulen 😞



  • hmmm normalerweise kannst du ueberpruefen ob es im zahlenbereich liegt und wenn nicht dann den else teil

    else
    {
        SetDlgItemText ( IDC_EDIT_Mein_Eingafeld, "");
        // oder
        // SetDlgItemText ( IDC_EDIT_Mein_Eingafeld, " Ungueltiger Wert !!!");
        // danach glauch die markierung aufs eingabefeld richten und markieren damit mann gleich neu versuchen kann
    
    }
    

    viel glueck



  • Vielen Dank werde das nochmal versuchen alelrdings erst später muss jetzt erstmal andere Sachen amchen, leider sidn nicht so toll 😡

    SO ich habs nun versucht geht auch nicht. Der leert das Feld einfach nicht habs chon alles versucht was ihr mir gesagt habt....

    Hat noch jemand Rat?



  • also wenn von den tips gar nichts geholfen hat wirds entweder schwer oder leicht.

    hast du breakpoints gesetzt? hast du nach geschaut ob er in diebetroffenen code zeilen springt welche dir vorgeschlagen wurden??
    vielleicht ist deine ueberpruefung falsch



  • Also er führt den Code direkt davor und direkt dahinter richtig aus.

    wenn cih m_intZahl = '0' setze steht da eine Null das klappt auch, aber ich will da halt nichts stehen haben nichtmal die Null und das geht nicht



  • ExtremeSnail schrieb:

    void CListview_testDlg::OnBtnsuchen() 
    {
    	UpdateData(TRUE);
    	m_ctlList.DeleteAllItems();
    
    	m_ctlZahl.Clear();	
    	UpdateData(FALSE);
    

    Dir ist klar, was UpdateData macht?

    mit m_ctlZahl.Clear() Greift Du direkt auf den Inhalt des Editfeldes zu und löschst diesen. In deiner Int-Variable steht aber jetzt der Wert, der am Anfang mit UpdateData(TRUE) aus dem Edit-Feld ausgelesen wurde (in deinem Beispiel 50)
    Mit UpdateData(False) schreibst Du den Wert aus Deiner Int-Variable wieder zurück in das Edit-Feld.



  • Ja aber wenn cih nicht UpdateData macht wird an dem Feld doch auch nichts geändert, es muss doch dem Feld gfesagt werden das es sich ändern soll daher muss ich UpdateData doch benutzen oder sehe cih das falsch, ohne dieses UpdateData geht es nämlich auch nicht.

    Bisher hat nichts geklappt ausser eine andere Zahl hinein zu schreiben aber das ist nicht mein Ziel...



  • Wenn Du über die Control-Variable auf den Inhalt des Edit-Feldes zugreifst, dann brauchst Du kein UpdateData. UpdateData ist dazu da den Inhalt des Edit-Feldes (und anderer Controls) mit den definierten Wert-Variablen zu synchronisiern:
    * UpdateData(TRUE): Inhalt des Controls wird in Wert-Variable übernommen.
    * UpdateData(FALSE): Wert aus Wert-Variable wird in Control geschrieben.
    Achtung es kann sein, dass Du an anderen Stellen des Programms explizit oder implizit weiter UpdateData-Aufrufe hast.

    Außerdem habe ich nochmal in der Hilfe nachgesehen. Die Methode Clear() von CEdit löscht nur den markierten Text. Nimm also lieber SetWindowText("").


Anmelden zum Antworten