Inhalt von Edit übergeben



  • Hallo!

    Ich steh grade voll aufm Schlauch...
    Ich habe ein EditFeld, das beim Öffnen des Dialogs mit einem Datum gefüllt wird.
    Jetzt will ich, dass beim Betätigen eines Buttons dieses Datum um 7 Tage erhöht wird.

    Mein Problem ist jetzt, dass ich den Wert, der in dem EditFeld steht, an die Funktion OnButton1 übergeben will, um dort eine Erhöhung um 7 Tage durchzuführen.

    Ich habs mit m_EditMemberVariable.GetWindowText(help) versucht, wo aber der Fehler kam, dass GetWindowText kein Element von CString ist. Bei weiteren Versuchen kamen auch immer Fehler.

    Helft mir bitte mal auf die Sprünge, sonst dreh ich hier noch durch... 😮

    Danke schonmal! 🙂



  • OK, ich hab grade festgestellt, dass ich bisher einen Denkfehler drin hatte. Deswegen formuliere ich das jetzt nochmal ganz anders und etwas ausführlicher!

    Also, Ich habe eine Wochenübersicht von Montag bis Sonntag. Die jeweiligen Tage werden beim Öffnen des Dialogs mit dem entsprechenden atkuellen Datum gefüllt. Das mache ich so: (wegen der Übersicht nur das Wichtgste!)

    CTime tTime = CTime::GetCurrentTime(); 
    	CString czTime = tTime.Format( "%A" );
    
    	if(czTime == "Monday")
    	{
    		tTime += CTimeSpan(0,0,0,0);
    		CString cMontag = tTime.Format("%d.%m.");
    		m_Montag = cMontag;
    	}
    	else
    		if(czTime == "Tuesday")
    		{
    			tTime += CTimeSpan(-1,0,0,0);
    			CString cMontag = tTime.Format("%d.%m.");
    			m_Montag = cMontag;
    		}
    		else
                      //analog weiter bis Sonntag und anschliessend das Datum der anderen Tage anpassen
    

    Jetzt will ich das beim Betätigen des Buttons "Nächste Woche" das Datum um 7 Tage erhöht wird - und zwar jedes Mal, wenn man den Button drückt. Man soll also wochenweise vorwärts gehen können.

    Ich hatte es so probiert, dass er sich das Datum vom Montag nimmt und dann alle Tage entsprechend um 7 Tage erhöht. Allerdings ist da das Problem, dass er dann immer nur in die Woche geht, die auf die aktuelle folgt, da er ja immer den aktuelle Montag als Grundlage nimmt.

    Wie kann ich das anders lösen? Ich komm absolut nicht weiter...

    Wenn ihr mehr Infos braucht, dann fragt bitte nach 😉

    Danke schonmal für die Hilfe!



  • ohne das jetzt getestet zu haben...
    CTime wird vermutlich die sekunden ab (weiss ich wann) irgend einem festgelegten zeitpunkt zählen...
    wenn du also ne woche vorspringen willst mutmaße ich jetzt mal das es reicht 7*24*3600 draufzupacken...



  • Das ist nicht das Problem. Ich kann eine Woche weiter springen (+7 Tage).
    Das Problem liegt darin, dass ich nicht weiss, wie ich bei erneutem Betätigen des Buttons um eine weitere Woche vorwärts gehen kann. 😕
    War vielleicht etwas unglücklich formuliert von mir... 😉



  • Leg dir doch eine Membervariable an, in der du dir die Intervalle merkst, um wieviel Tage weiter gerechnet werden soll (ich nenne die hier mal m_nTage).
    Also erstmal mit GetCurrenttime() das aktuelle Datum ermitteln und dann auf Montag zurück rechnen (machst du ja auch schon):
    - bei Montag: m_nTage = 0
    - bei Dienstag: m_nTage = 1
    usw.

    ------------------------------------------------------------FuelleWoche() Start
    Dann auf Montag zurück rechnen...

    COleDateTime t = COleDateTime::GetCurrentTime();
    COleDateTimeSpan tSpan(m_nTage, 0, 0, 0);
    t = t - tSpan;	// Montag
    

    ...und die Editfelder für die Wochentage füllen, z.B. mit

    COleDateTimeSpan tEinTag(1, 0, 0, 0);
    

    und

    t += tEinTag;
    

    Das würde ich praktischerweise in einer extra Funktion machen (z.B. in FuelleWoche()).
    ------------------------------------------------------------FuelleWoche() Ende

    Und um eine oder mehrere Wochen vorwärt oder rückwärts zu springen reicht dann

    m_nTage += 7;
    FuelleWoche();
    

    bzw.

    m_nTage -= 7;
    FuelleWoche();
    

    [edit] Zu verdeutlichen versucht [/edit]



  • Danke erstmal für den Vorschlag! Hört sich auf jeden Fall logisch an! 😃

    Ich komm aber mit dem m_nTage nicht weiter. Meine Kenntnisse reichen noch nicht aus, um zu wissen, wie ich die anlege. Ich hab ja kein Steuerelement oder sowas, wo ich die drauf legen kann.
    Wahrscheinlich ist das mal wieder irgendwas total simples, von dem ich noch nie was gehört... 😉

    Wie geht das?



  • So kannst du Membervariablen mit dem Assi anlegen:
    - im Arbeitsbereich einen Klick mit der rechten Maustaste auf die Klasse
    - Member-Variable hinzufügen
    - Typ (z.B. int) und Name (z.B. m_nTage) angeben
    - OK anklicken
    -> die Membervariable erscheint dann im Arbeitsbereich unter den Funktionen der Klasse.

    Tja, und der Unterschied:
    bei

    if(blabla)
    {
    	int i = 0;
    	// usw.
    }
    

    ist i nur zwischen den geschweiften Klammern gültig. Eine Membervariable ist solange gültig, wie das Objekt der Klasse existiert. Daher kannst du dann eben auf z.B. m_nTage in allen Klassenfunktionen drauf zu greifen, z.B. in OnInitDialog() auf 0 setzen, in EineWocheVor() auf +7 setzen und in FuelleWoche() den momentanen Wert auslesen.



  • Es klappt übrigens. Mach einen irgendwie so richtig stolz, wenn mal was läuft... 😉

    Danke!


Anmelden zum Antworten