Fehlerabfrage



  • chrische5 schrieb:

    ... Ich kann den DateTimePicker aber nicht benutzten, weil mein Programm den Wochentag zum eingegeben Datum ausgibt....

    rechte Maustaste auf das Edit Control Prperties dann den Reiter Styles und dann nen Hacken bei Read Only! 😉

    Dann gibt auch niemand Mist ein!
    Alles andere wäre auch nen riesen Aufwand weil du sonst immer checken müsstest welchen Tag du im dtp anzeigen darfst, nämlich wenn Tag gewählt nur jeden 7. Tag! weil wenn einer Montag eingibt darf z.B. der 2.6.05 nicht angezeigt werden weil es keinen Montag an dem Datum gibt!

    EDIT: außer in nem anderen Jahrhundert, richtiger wäre also am 02.06.2005



  • 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 mit

    GetDlgItem(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 mit

    GetDlgItem(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 👍


Anmelden zum Antworten