Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Werte des vorherigen Dialogs verwenden

Empfohlene Antworten

Veröffentlicht

Ich habe mehrere Dialoge bzw. mehrere Klassen,

wenn ich jetzt in einen neuen Dialog springe möchte ich vom

vorherigen Werte verwenden

so zu sagen, ich brauche die Werte von der anderen Klasse

:confused:

Sind die Variablen in den Klassen private deklariert?

Wenn nicht mußt du doch nur beim schließen des einen Dialogs die

entsprechenden Werte den Variablen des anderen Objekts zuweisen.

Wenn sie private deklariert sind brauchst du in der entsprechenden Klasse

halt ne extr Funktion die die Werte zuweist.

  • 5 Monate später...

Genau vor diesem Problem stehe ich auch.

Ich habe zwei Klassen:

1. Dialog-Klasse

mit zwei Komboboxen; ruft die zweite Klasse auf:

Laufwerke LW;

LW.Erkennen();

2. Laufwerke-Klasse

diese erkennt die Laufwerke und soll sie in die Komboboxen der 1. Klasse eintragen:

CCD_CopyDlg CDC;

CDDrive=szDrive;

CDC.m_ctlCD.AddString(CDDrive); //Zu Auswahl CD-ROM hinzufügen

...

ZLW=szDrive;

CDC.m_ctlZLW.AddString(ZLW); //Zur Auswahl Ziel hinzufügen

Bei der Übergabe wird das Programm mit einem Fehlerfenster abgebrochen:

"Debug Assertion Failed! ... File: afxwin2.inl Line: 735"

Wenn ich es ignoriere, läuft das Programm bis zur nächsten Übergabe weiter. Am Ende stehen keine Werte in der Kombobox.

Hi Narf!

das kann so ja auch nicht gehn :)

Du erzeugst ja, wenn ich das richtig deute, in deiner Laufwerks-Klasse eine neue Instanz deiner Dialogklasse. Wenn du an die dann die Werte uebergibst ists schon klar, dass die im urspruenglichen Dialog nicht auftauchen.

Du solltest deinem Laufwerks-Objekt vielleicht noch nen Pointer auf deinen Dialog mitgeben.

Goos

Du brauchst fuer deine Laufwerksklasse einen Konstruktor ueber den du einen Pointer deiner Dialogklasse uebergeben kannst. Den kannst du dann in einer entsprechenden Membervariable der Laufwerksklasse halten und hast somit den Zugriff auf deinen Dialog.

Wenn dus noch konkreter wissen magst, dann musst erstmal noch entsprechende Stuecke von deinem Code posten und vielleicht auch noch schreiben womit du entwickelst.

Goos

Ich entwickle mit VC++ 6.0.

Einen Konstruktor Laufwerke.Laufwerke() habe ich ist aber leer.

Bei OnInitDialog rufe ich die Laufwerkklasse auf, um die Laufwerkbuchstaben zu ermitteln.

Ok dann aender mal deinen Konstruktor ab.

Laufwerke::Laufwerke(CCD_CopyDlg *CDC) //wobei ich mal annehme, dass CCD_CopyDlg deine Dialogklasse ist

und dann legst du halt noch ne Membervariable in Laufwerke an.

CCD_CopyDlg *m_pCDC;

und im Konsturktor kannst dann den Pointer auf deinen Dialog an deine Membervariable uebergeben.

m_pCDC = CDC;

danach kannst du dann in deiner Laufwerksklasse ueber m_pCDC auf deinen Dialog zugreifen.

Im Dialog musst dein Objekt dann natuerlich instanziieren mit

Laufwerke LW(this);

Goos

Ich erhalte in der Dialogklasse bei Laufwerke LW(this) diese Fehlermeldung:

E:\Projekte VC++\CD_Copy\CD_CopyDlg.cpp(59) :

error C2664:

'__thiscall Laufwerke::Laufwerke(const class Laufwerke &)' :

Konvertierung des Parameters 1 von 'class CCD_CopyDlg *const ' in 'const class Laufwerke &' nicht moeglich

Ursache:

Konvertierung von 'class CCD_CopyDlg *const ' in 'const class Laufwerke' nicht moeglich

Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutig

Dann hast du im Konstruktor von deiner Laufwerksklasse den Typ Laufwerke drinstehen und nicht deine Dialogklasse:

...in der Not poste halt mal die Deklaration deiner Laufwerksklasse.

Goos

Nächstes Problem:

Eine Klasse greift auf Variablen aus drei anderen Klassen zu.

Also habe ich in den Konstruktor der Klasse geschrieben

Klasse_A::Konstruktor(Klasse1 *k1, Klasse2 *k2, Klasse *k3)

{

Habe auch drei Membervariablen.

}

Inhalt Klasse1:

OnInitDlg()

{

Klasse_A kla(this);

}

Fehlermeldung: Klasse_A akzeptiert keine 1 Parameter.

Was nun?

Naja, sicher ein Anfängerfehler.

Ich habe das jetzt so gemacht, dass die aufgerufene Funktion einer anderen Klasse diesen Pointer enthält, wenn diese auf Werte der aufrufenden Klasse zugreift.

Im Moment funktioniert es noch.

Und schon ist es wieder vorbei.

Nun habe ich mir folgendes gedacht:

Klasse_A ruft eine Methode in Klasse_B auf. Nun könnte ich doch in der Klasse_A schreiben:

Klasse_B *kb und dann mit kb->Methode() aufrufen, die dann in Klasse_B einer Variablen einen Wert zuweist und so auch auf die Variable zugreifen.

Original geschrieben von Narf!

Und schon ist es wieder vorbei.

Nun habe ich mir folgendes gedacht:

Klasse_A ruft eine Methode in Klasse_B auf. Nun könnte ich doch in der Klasse_A schreiben:

Klasse_B *kb und dann mit kb->Methode() aufrufen, die dann in Klasse_B einer Variablen einen Wert zuweist und so auch auf die Variable zugreifen.

Jo wenn du zwischen dem Klasse_b *kb und dem kb->Methode() nicht das kb = new Klasse_b vergisst.

Goos

Jetzt habe ich folgendes vor, um auf eine andere Klasse zuzugreifen:

#include "Klasse_B.h"

Klasse_A::Methode()

{

Klasse_B *kb;

kb->Methode2();

//bzw.

kb->Variable; //mit Inhalt aus Klasse_B

}

Ich möchte damit erreichen, dass ich nur bei Bedarf auf die andere Klasse zugreife.

Bin ich jetzt auf dem richtigen Weg?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.