UpdateData(TRUE) // (FALSE) auf eine bestimmte variable setzen?
-
Hallo aine Frage wenn ich bei einem Formular mit einigen Optionen UpdataData(FALSE) per button setze setzt er mir das ganze fenster auf den ursprungszustand, wie kann ich es schreiben, das er mir nur eine bestimmte variable auf den ursprungszustand setzt?
void CsteuerelementeDlg::OnBnClickedDfltmsg() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. UpdateData(FALSE);so ist das für das gesammte Formular wird halt jede variable auf den null-wert gesetzt (Ursprungszustand)
gruß
MoDAX
-
UpdateData(FALSE) setzt dir die Variablen nicht auf den Ursprungszustand zurück, er aktualisiert lediglich die Steuerelemente in der Anwendung mit den neu zugewiesenen Werten!
-
Hi
um die nächste Frage vorzubeugen

Einzelne Formularelemente kannst du mit SetDlgItemText usw. "bearbeiten".
z.B.
((CEdit*)GetDlgItem(IDC_EDIT))->SetDlgItemText("Bitte Text hier hineinschreiben");Grüße Rapha
-
hmm stimmt hab mich falsch ausgedrückt (false) liest die variablen aus und gibt sie ans fenmster weiter und (TRUE) nimmt die eingabe im fenster und schreibt sie in die variablen, das is klar nachdem die variablen alle den "ursprungszustand" beinhalten, setzt er mir das eingabe feld auf "null" zurück, ich möchte aber nur eine einzige variable resetten
also müsste ich theoretisch erst alle variablen aus dem fenster einlesen über (true) bis auf die gewünschte und dann mit (FALSE) die werte in das Fenster zurückschreiben, sehe ich das richtig?
gruß
MoDAX
-
Hi,
nene, vergiss mal dein reseten

Wenn du eine Variable "reseten" willst, mach folgendes (Beispiel: Editfeld):
CString strStdValue = "keine Eingabe"; // der Standarttext // Das Steuerelement mit dem Standartwert füllen ((CEdit*)GetDlgItem(IDC_EDIT))->SetDlgItemText(strStdValue); // Die dazugehörige Variable mit dem Standartwert füllen m_Edit = strStdValue;Grüße Rapha
-
@rapha hmm mit deinem code komm ich nicht so ganz klar bin erst am anfang
GetDlgItem bekommt als parameter die id des zu ändernden steuerelements was bewirkt das der Zeiger auf das steuerelement zeigt mit ShowWindow etc kann ich verbergen oder zeigen aber was bewirkt das ((CEdit* und SetDlgItemText?
gruß
MoDAXP.S. habs aber geschafft hab erst mit UpdateData(TRUE) die Werte eingelsen dann die eine gewünschte Variable wieder neu gesetzt und dann mit UpdateDate(FALSE) die werte neu ausgelesen so änder ich nur wieder die gewünschte variable bzw setzt sie auf einen beliebigen zustand
-
Hi
UpdateData führt praktisch für jedes Steuerelement SetDlgItemText aus (und noch ein bisschen mehr [z.B. Checkbox], aber das ist egal).
Du kannst mit der Funktion SetDlgItemText also z.B. den Inhalt einer EditBox ändern.
Sorry seh grad ich hab in meinem Beispiel die Funktion SetDlgItemText mit SetWindowText vertauscht.
Ich erklärs dir trotzdem (irgendwann wirst du so etwas ähnliches brauchen).((CEdit*)GetDlgItem(IDC_EDIT))->SetWindowText(strStdValue);GetDlgItem übernimmt die ID des Dialog Elements, das du "manipulieren" willst und liefert ein CWnd* zurück. CEdit ist von CWnd* abgeleitet und verkapselt die Funktionalität einer Edit Box.
Da du dir bei dem obrigen Code sicher bist
, dass IDC_EDIT die ID eines Edit Feldes ist, darfst du das zurückgegebene CWnd* in ein CEdit* konvertieren.
CWnd* hat bereits eine SetWindowText Funktion also wäre die Konvertierung in ein CEdit* theoretisch überflüssig, nutzt aber praktisch der Übersicht in deinem Quellcode.
Dieser Quellcode bedeutet also kurz:
- erhalte von GetDlgItem ein CWnd* auf das Control
- konvertiere dieses CWnd* in ein CEdit* [hier: optional]
- rufe die Methode SetWindowText des CWnd*CEdit* Objekt aufIch hab aber wie schon gesagt die Funktionen vertauscht - sorry nochmal.
Du könntest anstatt dem angegebenen Code auch folgendes verwenden
SetDlgItemText( IDC_EDIT, "Hallo" );:p :p
Dieser Code füllt das Control IDC_EDIT [in meinem Beispiel ein Edit Control] mit der Zeichenkette Hallo.
Das habe ich eigendlich die ganze Zeit gemeint.Ich hoffe ich habe dich nicht zu sehr verwirrt

Grüße Rapha
-
uffz 3 lösungen zu meinem Problem
1.Lösung:
CString m_strMessage = "TEST"; ((CEdit*)GetDlgItem(IDC_MSG))->SetWindowText(m_strMessage);2.Lösung
SetDlgItemText( IDC_MSG, "Hallo" );3.Lösung
UpdateData(TRUE); m_strMessage = "Schreiben Sie hier eine Nachricht hinein"; UpdateData(FALSE);danke für die erklärung hab den funktionsaufruf verstanden
was mich jezt noch interessieren würde welche davon die bessere "schönere Lösung ist"die 3. Lösung funktioniert zwar jedoch lese ich erst aus setzte dann neu und lese aus dem variablen speicher aus ob das so sinnig ist?
gruß
MoDAX
-
Hi,
freut mich, dass du mich verstanden hast

die beste Lösung ist eindeutig:
SetDlgItemText( IDC_MSG, "Dein Text" );Diese Lösung ist eine Alternative, wenn du noch mehr manipulieren willst (wie z.B. die Größe des Controls usw.):
((CEdit*)GetDlgItem(IDC_MSG))->SetWindowText("Dein Text");Diese Methode auf keinen Fall verwenden, da sie unschöne Nebeneffekte haben kann, die das Fehlerfinden extrem schwierig machen können:
UpdateData(TRUE); m_strMessage = "Schreiben Sie hier eine Nachricht hinein"; UpdateData(FALSE);Grüße Rapha