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.
biirusooseeji Geschrieben 31. Januar 2002 Geschrieben 31. Januar 2002 Wo und wie ist dein int denn deklariert?
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!
Comroader Geschrieben 31. Januar 2002 Autor Geschrieben 31. Januar 2002 Nochmals Danke. Das ganze funzt echt gut !!!
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
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;" .
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
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.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden