Gruft Geschrieben 25. August 2001 Teilen Geschrieben 25. August 2001 Hallo zusammen, wenn ich die Eingabe eines numerischen Feldes mit Hilfe der Nachricht OnKillfocusblabla beim Verlassen auf Richtigkeit pruefe soll das Programm bei einer Zahl >49 (Lottovergleicher)den Focus auf diesem Feld lassen. Das klappt auch wunderbar, aber jetzt kommt das Problem: sobald das Feld den Focus bekommt weil Zahl ungueltig will ich ja eigentlich ein leeres Eingabefeld haben, nur ich weiss nicht wie ich das machen soll. Wenn ich die Variable einfach auf Null setze uebernimmt er zwar die Null ins Feld, laesst sie aber auch stehen, wenn ich dann Beispielsweise eine 5 Eingebe liest das Prg. 50 und gibt den Focus nicht weiter (da ja >49). Ich hab das ganze auch schon mit NULL versucht und mit Anfuehrungsstrichen bei letzteren setzt das Prg. dann irgendeine Zahl ins Feld. Ich hoffe dass ich das Problem einigermasen verstaendlich erklaert habe. Vielleicht weiss ja einer Rat. Ciao, Gruft Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 25. August 2001 Teilen Geschrieben 25. August 2001 Rufe mal UpdateData() oder vielleicht reicht nur das davon aufgerufene DoDataExchange() mit falls notwendigen UpdateWindow() auf. man kann allerdings auch mit RedrawWindow einen bestimmten Bereich (RECT-Struktur) des Fensters neu zeichnen lassen. Das UpdateData() wird allerdings den Inhalt der Variablen erst austauschen. Wenn man mit Member-Variablen arbeitet (DirectDataExchange oder DDX) erübrigt sich das allerdings. Hier kannst Du dann mit m_EingabeFeld.Empty(); den Inhalt löschen. Die Eingabe von 0 ist ja ein Wert und Sonderzeichen werden bestimmt als Ascii-Wert übernommen! <FONT COLOR="#a62a2a" SIZE="1">[ 25. August 2001 12:41: Beitrag 2 mal editiert, zuletzt von Crush ]</font> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 26. August 2001 Teilen Geschrieben 26. August 2001 Die "0" bekommst Du nicht wirklich weg, wenn Dein Eingabefeld mit einer numerischen Variablen verknüpft ist. Die Windows-übliche Vorgehensweise ist aber auch eigentlich die, dass man bei Fehleingaben die falsche Eingabe stehen lässt (damit der dumme User auch sieht, was er falsch gemacht hat ), aber die gesamte Eingabe selektiert. Dann wird bei einer neuen Eingabe die alte ersetzt. CEdit* pEditCtrl = (CEdit*) GetDlgItem( IDC_EDIT ); pEditCtrl->SetFocus(); pEditCtrl->SetSel( 0, -1, TRUE ); // selektiert alles [/code] Dabei musst Du für IDC_EDIT die Control-ID Deines Eingabefelds setzen. Wenn Du schon eine Kontrollvariable für den Eingabefeld hast, dann kannst Du dir den Kram mit GetDlgItem natürlich sparen. Zweite Möglichkeit: Wenn die erlaubten Werte sich durch Minimum und Maximum beschreiben lassen und sich im Laufe des Programms nicht verändern, dann kannst Du sie auch gleich im Klassenassistenten fest eintragen. Das erspart Dir OnKillFocusxyz, und hat den Vorteil, dass Du keinen gültigen Wert eingeben musst, wenn Du das Programm nur beenden willst . <FONT COLOR="#a62a2a" SIZE="1">[ 26. August 2001 11:12: Beitrag 1 mal editiert, zuletzt von Klotzkopp ]</font> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.