Zum Inhalt springen

Feld bei Killfocus leeren unter VC++


Gruft

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...