Komplizierte Frage zu CStdioFile
-
Ich verwendet dazu UpdateAllViews aus dem CDocument.
Jeweils mit einem Hint für Load/Commit. Bei Load werden die Daten aus dem Dokument geladen und in den Dialog übertragen. Bei Commit werden die Daten aus dem Dialog in das Dokument zurückgeschrieben.
-
Das verwende ich ja aber das bringt mir bei der neuen Combobox nix weil ich das OpenFile so nicht speichern kann bzw. es wird nicht gemacht obeohl ich alles so eingetragen habe wie sonst auch
hier mal der CodeSnipsel dazu (nur ein Auszug das ist viel länger ;))
void CDSOZDoc::OnSettings() { CSettingsDlg settingsDlg; settingsDlg.m_sRActuator = m_sRActuator; if (IDOK == settingsDlg.DoModal()) { m_sRActuator = settingsDlg.m_sRActuator; //---------------------- UpdateAllViews (NULL); SetModifiedFlag (); } }
So speichere ich aber nur die Variable m_sRActuator, also das diese eben die Datei immer öffnet, aber die Combobox zeigt mir damit nicht das an was ich ausgewählt habe.
In dem Fall entweder "9300" oder "9400". Stelle ich das nun von 9300 auf 9400 und drücke "ok", sollte eigentlich diese Einstellung gespeichert sein. Wenn ich aber den Dialog jetzt wieder öffne steht die Combobox wieder auf "9300" aber es müsste "9400" sein.
-
kann mir den keiner helfen? oder ist es zu schwer zu verstehen was mein problem ist?
-
Wird denn der Wet im Dialog überhaupt zugeordnet?
Das kannst Du doch einfach im Debugger kontrollieren.
-
Martin Richter schrieb:
Wird denn der Wet im Dialog überhaupt zugeordnet?
Das kannst Du doch einfach im Debugger kontrollieren.und wie? in meinen büchern steht darüber nichts
Edit:
Hab mal haltepunkte gesetz und an den zwei stellen senden und empfangen bleibt es stehen.
-
Stelle deine Projektmappenkonfiguration auf Debug (Drop-Down rechts neben dem Play/Dreieck Symbol).
Danach klikst du mit der linken Maustaste in den grauen Balken links neben deinem Quellcode.
Und zwar denau da wo`s interessant wird.
Da müsste dann ein roter Punkt erscheinen.
Dass ist der sogenannte Break-PointDanach drückst du [F5] und lässt dein Programm loslaufen.
Sobald dein Programm die markierte Stelle ereicht, hält es an.Jetzt beginnt das debuggen.
Mit [F10] gehst du im Programm eine Zeile weiter.
Mit [F11] gehst du gehst du in Funktionen hinein.Wenn du mit der Maus über die Variablen fährst, siehst du ihren aktuellen Inhalt.
Du kannst dir aber auch einzelne Variablen in den Reiter "Überwachen" hineinziehen um ständig zu sehen was sich da tur.
Der Reiter Überachen ist quasi die übersichtliche Version der Reiter "Auto" und "Lokal".
Diese Reiter findet man meißtens links unten im Fenster.Dass war jetzt ein Kurzer Crash-Kurs im debuggen.
Wenn es noch Fragen gibt, wird dir gerne geholfen.
-
Vielen Dank @Sepp hat geklappt
So hab jetzt die Variable mal überwacht und vorher auch mal was in eine der Textdateien was reingeschrieben.
Die Variable enthält bei speichern des "Einstellungen"-Dialogs den Inhalt aus der Textdatei und bei öffnen enthält der Dialog dann wieder den Inhalt. Somit funtkioniert das speichern in die Variablen perfekt.
Nun ist es aber noch so das wenn ich den "Einstellungen"-Dialog wieder öffne ist das Drowp-Down-Menü leer und enthaöt nicht die ausgewählte Option, was aber wichtig ist.
Hier ein Bild
http://saved.im/mtuymdezb2wy/unbenannt-1.pngWie kann ich das lösen?
Bisher habe ich das, wie schon oft gesagt, über ein die Enum-Funktion gelöst. Dies ist aber hier nicht möglich wegen der dem "OpenFile"
MFG
Shona
-
Hallo,
genau so, wie du hier:
settingsDlg.m_sRActuator = m_sRActuator;
eine Variable vorbelegst, musst du auch die fehlende Einstellung erst setzen. Irgendwo musst du die Daten ja einlesen, und die müssen dann gesetzt werden, vor dem Aufruf des Dialogs.
MfG,
Probe-Nutzer
-
das mach ich ja mit
m_sRActuator = settingsDlg.m_sRActuator;
aber das Drop-Down-Menü wird dann nicht auf diese Einstellung gesetzt bzw. ich meine das es eben nicht ausgewählt ist, das Feld ist leer aber in der Variable ist es drin.
Ich weiß das ich das irgendwie in das "InitializeControls" rein bringen muss aber mein Problem ist das ich nicht weiß wie ich den switch-befehl dafür mache weil das OpenFile mir Probleme macht
HIer der switch-Befehl wie ich die Datei öffne
switch(m_sActuator.GetCurSel()) { case 0: m_sRActuator300 = OpenFile("9300.txt"); break; case 1: m_sRActuator400 = OpenFile("9400.txt"); break; }
Ich weiß auch das ich es ungefähr folgendermaßen aussehen muss (nur Beispiel)
switch (keine_Ahnung_was_für_eine_Variable) { case test300: m_sActuator.SetCurSel(0); break; case test400: m_sActuator.SetCurSel(1); break; }
Wie gesagt ich hab das bei den anderen immer über den enum-befehl gemacht aber hier weiß ich einfach nicht wie ich das machen soll. Bin schon am verzweifeln
-
Nur eine von vielen Lösungen:
Füge eine enum in deinen Dialog (innerhalb der Klasse CSettingsDlg ) ein:
public: ... enum test { Test300, Test400};
dann darunter eine Zustandsvariable vom Typ der enum:
public: ... ... test currentTest;
in OnInitDialog der CSettingsDlg-Klasse (wenn noch nicht vorhanden, dann entsprechende Nachricht hinzufügen):
switch(currentTest) { case Test300: m_sActuator.SetCurSel(0); break; case Test400: m_sActuator.SetCurSel(1); break; default: m_sActuator.SetCurSel(-1); break; }
Vor dem Aufruf dann das Setzen des aktuellen test:
void CDSOZDoc::OnSettings() { CSettingsDlg settingsDlg; settingsDlg.m_sRActuator = m_sRActuator; settingsDlg.currentTest = CSettingsDlg::Test300; // z.B. Test300 festlegen if (IDOK == settingsDlg.DoModal()) { m_sRActuator = settingsDlg.m_sRActuator; //---------------------- UpdateAllViews (NULL); SetModifiedFlag (); } }
Alles klar?
MfG,
Probe-Nutzer