Fehlerabfrage



  • [quote="Polofreak"

    -Variable drauf anlegen ( Control DateTimepicker)

    Also, wenn ich das so mache, meckert er, dass er eine HeaderDatei von mir will.

    Die andere Variante ist ähnlich einfach:

    Für mich als blutiger Anfänger ist selbst der kleinste Stein wirklich schwer zu heben.

    -Eidt Control auf deinem Dialog platzieren
    -Klassenassi Member CString anlegen
    -im assi Messagemaps WM_KILLFOCUS oder SELCHANGE o.ä. auswählen
    -doppelclicken
    - button Edit Code
    - und da drin dann
    - mit atoi den string in int konvertieren
    - dann if int > 28
    - deinString.SetSel...

    Das kapier ich gar nicht. Ich habe drei Felder: 1x Tag, 1x Monat, 1x Jahr. Jedes mit einer int Memebervariable zum Auslesen. Dann habe ich noch einen Button und wenn der geklickt wird, beginnt er zu berechnen.

    Ich will, wie du schon geschrieben hast, wirklich keine fertigen Funktionen, aber ich habe einfach noch keine Ahnung.

    Danke für eure Geduld

    chrische



  • Hi, na dann versuch ich es mal.

    Hast du das Control DateTimePicker schon gefunden? Welche Visual C++ Version hast du überhaupt? (Je nach dem ist das Vorgehen anders.)

    Bei VC6 sieht das Symbol aus, wie ein kleines Fenster mit einem Kreis davor. Der Tooltip lautet "Datums-/Zeitauswahl".

    Wenn du das gefunden und auf deinem Dialog platziert hast und mir deine VC Version sagst, dann sehen wir weiter. 🙂

    chrische5 schrieb:

    Polofreak schrieb:

    -Variable drauf anlegen ( Control DateTimepicker)

    Also, wenn ich das so mache, meckert er, dass er eine HeaderDatei von mir will.

    1. Der Typ heißt CDateTimeCtrl (sorry)
    2. Welche Headerdatei vermisst er denn?
    Wenn du eine neue Klasse nutzt und die braucht noch eine Headerdatei, dann schau doch einfach mal in die MSDN - da steht drin, welche es ist. 😉



  • Hallo

    Ich besitze Visual 2003 .net .Habe aber vorher schon mal ein wenig mit VC 6.00 gearbeitet. Ich weiss also noch, was der Klassenassistent ist. Das mit DateTimePicker war aber meine eigne Blödheit. Ich dachte, dass das nur eine Controlvaraible auf mein Textfeld sein soll und er hat dann immer gemeckert, dass er das nicht kennt und ich ihm die Headerdatei nennen soll, wo so etwas drin steht. (so könnte ich es mir zumindest vorstellen) Ich kann den DateTimePicker aber nicht benutzten, weil mein Programm den Wochentag zum eingegeben Datum ausgibt. Beim DateTimePicker zeigt er diesen aber mit an. Fetzt also nicht. Vielleicht kannst du ir deswegen die andere Möglichkeit noch einmal erläutern (Killfocus,…)

    Danke

    chrische



  • nicht immer gleich aufgeben wenn du was ncht kennst!
    mach mal

    int Wochentag = dtp_deinDateTimePicker.GetDayOfWeek( );
    

    ud da wo du es dann aktualisieren willst:

    switch(Wochentag)
    	{
    	case 1:
    		m_sWochentagEdit = "Sonntag";
    		break;
    	case 2: 
    		m_sWochentagEdit = "Montag";
    		break;
    ........
    

    Dann bekommst du den Tag der Woche!

    MSDN schrieb:

    Valid return values range between 1 and 7, where 1=Sunday, 2=Monday, and so on. If the status of this COleDateTime object is not valid, the return value is AFX_OLE_DATETIME_ERROR.

    Dann kannste ja ein Edit machen und in dem dann dementsprechend Montag Dienstag ... ausgeben! (oben virtuell mal die Variable m_sWochentagEdit verwendet) 😉



  • Dann kannste ja ein Edit machen und in dem dann dementsprechend Montag Dienstag ... ausgeben! (oben virtuell mal die Variable m_sWochentagEdit verwendet)

    Ich würde eine Combobox nehmen und als reine Auswahlliste verwenden - dann kann der User keinen Mist eingeben. 😉



  • 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