Comroader Geschrieben 31. Januar 2002 Geschrieben 31. Januar 2002 Hallo, Ich hab schon wieder ein Problemchen ich möchte auf den Wert einer int-Variable zugreifen. Ich weis der Variable in einem Dialog einen Wert zu ,brauch dann aber im anderen Dialog den Wert der Variable und will danach die Variable wieder auf 0 setzen. Muss ich vielleicht die Variable in die Klasse einfügen ??? Bitte um schnelle Hilfe !!! Danke. P.S:Benutz die MFC. Zitieren
biirusooseeji Geschrieben 31. Januar 2002 Geschrieben 31. Januar 2002 Wo und wie ist dein int denn deklariert? Zitieren
ffGebaeck Geschrieben 31. Januar 2002 Geschrieben 31. Januar 2002 Servus! Das kommt darauf an von wo deine dialoge aufgerufen werden! Also, mal angenommen du hast 2 dialoge: CDialog1Dlg und CDialog2Dlg Der erste Dialog(CDialog1Dlg) ist auf dem Bildschirm, vom ersten Dialog rufst du den 2ten auf. dann schreibst du ja CDialog2Dlg dlg; dlg.DoModal(); oder so ähnlich. Um jetzt eine Variable zu übergeben, musst du im 2. Dialog eine Membervariable anlegen, z.B. int m_nWert; diese muss natürlich "public" sein! Um nun die Variable zu ändern, schreibst du einfach: CDialog2Dlg dlg; dlg.m_nWert = 20; dlg.DoModal() Zack, nun ist die Variable geändert, wenn du nun vom 2ten dialog, wärend der offen ist, im 1.ten was ändern willst, ist das erweng komplizierter: Also, leg im 2.ten Dialog einen Pointer vom Typ CDialog an: CDialog * m_pDialog; Nun beim aufruf deines 2ten Dialogs, übergibst du einen Zeiger auf den 1ten Dialog: CDialog2Dlg dlg; dlg.m_pDialog = this; dlg.DoModal(); Der This Zeiger, den jede Klasse besitzt ist ein Pointer auf die eigene Klasse, also in diesem Fall ein Zeiger auf CDialog1Dlg. Wenn du nun im ersten eine Membervariable ändern willst, geht das vom 2ten folgendermassen: ((CDialog1Dlg*)m_pDialog)->m_nWert = 100; Die Variable m_pDialog ist ja zu Beginn eine Variable des Typs CDialog, nun Castest du sie auf CDialog1Dlg, du kannst statt einer CDialog-Variable auch gleich eine CDialog1Dlg Membervariable im 2.ten Dialog anlegen. Dann entfällt das Casten, musst nur noch m_pDialog->m_nWert = 100; eingeben, tja viele Wege führn nach Rom! Ich hoff mal des war etz nicht zuviel ;D bye JO;) Ps. Solltest natürlich den Pointer im Konstruktor deines 2ten Dialogs auf NULL setzen! Zitieren
Comroader Geschrieben 31. Januar 2002 Autor Geschrieben 31. Januar 2002 Nochmals Danke. Das ganze funzt echt gut !!! Zitieren
ffGebaeck Geschrieben 31. Januar 2002 Geschrieben 31. Januar 2002 Original geschrieben von Comroader Nochmals Danke. Das ganze funzt echt gut !!! Gern geschehn! :D :D :D Zitieren
Peter Pan Geschrieben 1. Februar 2002 Geschrieben 1. Februar 2002 Man kann auch im Konstruktor des 2. Dialogs einfach ne Referenz auf den zu ermittelnden Wert mitgeben. Wenn man ganz schnell arbeiten muss, gibts noch ne "unsaubere" Variante, und zwar kann man nach dem der Dialog2 zerstört wurde ja trotzdem noch auf seine Membervariablen zugreifen ( nur bei public ). Einfach "int gewuenschterWert = Dialog2Instanz.gewuenschteMemberVariable;" . Zitieren
ffGebaeck Geschrieben 1. Februar 2002 Geschrieben 1. Februar 2002 Hi! Warum ist denn die Methode unsauber? Ich weis nicht was du unter "zerstört" verstehst, ich denk mal du meinst, wenn er geschlossen ist, na und? Das Objekt der Klasse TestDlg ist doch noch da oder? Und DoModal() war ja nur eine kleine funktion der Klasse von dem das Objekt(Der Dialog) abgeleitet wurde. Oder? sers JO Zitieren
Peter Pan Geschrieben 2. Februar 2002 Geschrieben 2. Februar 2002 Unsauber weil es nicht der Standdardweg ist, bei 2 Dialogen kann aber eigentlich nicht viel passieren, aber Du weisst ja nie was nach dem schließen eines Dialoges noch durchlaufen wird, wenn es eigene kleine Projekte sind dann isses egal, bei Code an dem mehrere arbeiten würde ich das net so machen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.