Fehlerabfrage
-
Hallo
Ich habe das Gefühl, dass wir aneinader vorbei reden. Ich habe drei textfelder in dem der Benutzer jeweils eine int Zahl eingibt. (für Tag, Monat und Stunde) Dann klickt er auf einen Button und der Wochentag wird berechnet. Das habe ich auch schon erledigt. Das ging auch ohne DateTimepicker gut. Die Variablen für Tag und Monat haben einen Gültigskeitsbereich (Tag zwischen 1 und 31; Monat zwischen 1 und 12) Bei Jahr kann der Benutzer eingeben was er will. Die Berechnungen sind also nicht das Problem. Ich will nur checken, ob der eingegebene Tag im eingegebenen Monat überhaupt existiert. (30. Tag im Februar ist Quatsch) Dann würde ich gerne genau das selbe machen, was das Programm schon von alleine macht, wenn ich die Gültigsgrenzen überschriete: MessageBox mit Warnung, Focus auf falsche Eingabe, blau Markierung auf falscher Eingabe (ist das dasselbe wie Fokus?) und die Berechnung soll nicht stattfinden.
Ich weiss nicht, ob ihr mich oder ich euch nicht verstanden habe, aber wie immer schon mal ein vorzeitiges Danke für eure Antworten.
chrische
-
Langsam dämmert es mir.
Also: Du behandelst einfach die Nachricht WM_KILLFOCUS für das Monats- und das Tagsedit.
Von da aus rufst du eine Funktion auf, die die eingegebenen Daten prüft.Eine Meldung machst du mit AfxMessageBox.
Das Feld blau machst du mitGetDlgItem(IDC_DES_EDIT)->SetFocus();
Wie du an den Inhalt kommst, hast du ja sicher schon herausgefunden.
Okay?
-
Hallo
Ich habe es geschafft. Danke für eure Hilfe und ich muss sagen, am Ende war es wirklich nicht so schwer.
Vielen, vielen Dank
chrische
-
spiel aber doch mal mit dem DateTimePicker rum, der ist viel schöner! Da kann man auch seine Int eingeben, aber man hat wesentlich bessere Behandlungsroutinen. Genügend Anleitung solltest ja jetzt haben. Du kannst deine Berechnungen und alles ja lassen, da du ja von oben genannten Funktionen immer ein int zurück bekommst!
Probiers, merk dass es besser ist, nutze es danach in Zukunft immer
-
estartu_de schrieb:
Also: Du behandelst einfach die Nachricht WM_KILLFOCUS für das Monats- und das Tagsedit.
Von da aus rufst du eine Funktion auf, die die eingegebenen Daten prüft.Eine Meldung machst du mit AfxMessageBox.
Das Feld blau machst du mitGetDlgItem(IDC_DES_EDIT)->SetFocus();
Das ist aber ganz schön gefährlich, hatte ich auch mal so programmiert (kein Datum, sondern andere Überprüfungen). Aber wenn man nun zum Beispiel den 52. (oder was auch immer) eingibt, und dann "ESC" drückt befindet man sich in einer Endlosschleife. Der Dialog ist schon verschwunden, aber er springt immer wieder ins CEdit rein und raus (erneute Überprüfung) - da hilft dann nur der Taskmanager
Also dann entweder den Tag vorm Setfocus auf einen gültigen Wert setzen, oder die Zum Beispiel erst gar keine blödsinnigen Eingaben zulassen (WindowProc überschreiben)
DateTimePicker hat den Vorteil das er die schon alles berücksichtigt - zum Beispiel auch die Schaltjahre
-
Ups, das kannte ich noch nicht.
Das Problem war ja nur leider, dass so gut wie keine Kenntnisse vorhanden zu sein schienen und da hab ich das allerallereinfachste rausgesucht.
Mit Spinbutton wäre auch gegangen (da hätte es automatisch geprüft), man hätte nur je nach Monat die Grenze manuell einstellen müssen.
-
mit der gültigen eingabe, bzw mit dem eingabefilter gibt es viele schöne Sachen bei Codeproject ist mir nur grad so aufgefallen.
-
Hallo
Das beschriebene Prolem ist auch bei mir aufgetreten und ich habe die Prüfung der Eingabe erst gemacht, wenn der Benutzer auf Berechnen klickt. Habe also versucht mit Killfocus zu arbeiten und es hat bei mir rausgestellt, dass ich alles noch einfacher hätte haben können.
chrische
-
Viel einfacher? Na wie denn??
-
Ich meinte damit, dass ich killfocus gar nicht behandeln musste, weil ich ja erst geprüft habe, wenn der Benutzer den Knopf gedrückt hat. Dann habe ich einfach wieder Focus auf ein Feld gesetzt und die Berechnungen natürlich nur durchgeführt, wenn der Eingabechaeck true war.
chrische
-
ah OK wenn ich dich jetzt richig verstanden habe, dann klappts jetzt??
-
Genau
Danke