Dialog auf mehrere verteilen
-
hallo,
ich habe bis jetzt immer nur in einem einzelnen dialog und demzufolge auch nur in einer einzigen klasse gearbeitet. Nun hab ich das problem, dass mein dialog voll ist und ich den bereits bestehende inhalt am liebst aufteilen würde. entweder auf mehrere dialoge, oder mithilfe von registerkarten.
die membervariablen müssen alle untereinander kommunzieren können bzw. jede membervariable müsste des einen dialogs müsste also in den anderen dialogen genauso bekannt sein.
wie lässt sich das realisieren. kann man da was vererbung machen? muss ich überhaupt eine 2. klasse erstellen, wenn ich einen neuen dialog erstelle? oder kann ich auch 2 dialoge in einer klasse haben?
danke für eure antworten,
mfg, TFTS
-
Hallo,
das ist sicherlich eine Frage auf die es tausend Antwortmöglichkeiten gibt. Für den Anfang wären vielleicht wirklich Registerkarten ganz sinnvoll. Defacto hast Du dann schon mehrere Dialoge, denn für jede Registerkarte brauchst Du einen eigenen Dialog.
Dann hast Du aber immernoch das Problem mit den Einstellungen. Die solltest Du sowieso nicht in der Dialogklasse per Membervariablen speichern, sondern in einer weiteren Klasse "Settings" oder so. Die Instanz der Klasse müsstest Du dann an alle Dialoge weitergeben.Das wäre jetzt die einfache Variante. Es gibt natürlich auch noch SDI, MDI usw.
-
Wenn du mit Klassen arbeitest, aber von Klassen und OO nix verstehst,
würde ich die Bildungslücke mal schliessen...Man löst soetwas heute in der Regel so, das man die Daten von der Ansicht
trennt, und man dann eine zentrale Klasse hat die die Daten bzw. die
Klassen die die Daten enthalten verwaltet. Diese Klasse ist als Singelton
implementiert, d.h. es gibt immer nur eine Instanz zur Laufzeit.
Ob du das nun über mehrere Dialoge oder eine TabCtrl in der Darstellung machst,
tut sich im Endeffekt fast nix. Für beides wirst du neue Dialoge erstellen müssen,
und dafür auch entsprechende Klassen für die Ansichten.mfg.
Devil
-
das problem wird sicherlich werden, dass ich ja jetzt schon ne ganze menge programmiert habe. hauptsächlich control funktionen (OnBnClick etc.)
wäre es denn möglich in meiner neuen "zentralen Klasse" über jeweils ein funktion pro dialog die daten abzurufen und über eine andere funktion wieder zu senden. ich weiss jetzt halt nicht so recht wie ich das am einfachsten und sichersten "umwandel" ohne, dass ich am ende vor einem kaputten haufen 'code' stehe
danke schonmal
mfg, TFTS
PS: in welche klasse würden dann die control funktionen kommen, in die dialog oder in die "zentrale" klasse
-
Die Funktionen für den Dialog bleiben natürlich beim Dialog.
Dort greifst du dann auf die zentrale Klasse, also den Singelton zu:
Singelton *pinstance = Singelton::GetInstance();
pinstance->SetMyVar(varwert);
MessageBox(pinstance->GetmyVar());Devil
-
was muss ich bei der definition der singelton klasse beachten, wo liegen die besonderheiten?
soll ich diese als MFC klasse definieren? welche Basisklasse sollte ich wählen? wozu dient die automatisierung?
mfg, TFTS
-
ich versuchs nochmal
ich hab mir jetzt eine klasse "daten" erstellt. nun möchte ich 3 variablen (meinetwegen x,y,z) an diese klasse schicken und dort speichern. danach möchte ich diese 3 variablen wieder in meine dialog klasse zurückholen.
ich habe in der daten klasse 2 Funktionen "Daten_schreiben" und "Daten_holen"
Daten_schreiben soll die von der dialog klasse kommenden variablen irgendwie sichern. es soll natürlich der name der variablen erhalten bleiben, da ich beim zurückholen der variablen natürlich in meiner dialog klasse irgendwas in der art x.Daten_holen() y.Datenholen() z.Datenholen() schreiben will. Das es soo direkt nicht geht ist mir klar, da x,y,z natürlich nicht vom Typ Daten sind. Aber es sollte letztendlich irgendwie in diese richtung gehen. meintewegen auch mit anderen operatoren und zusätzlichen pointern.
Kann mir jmd sagen wie ich das mache, oder wo soetwas EINDEUTIG beschrieben steht?
danke für eure hilfe
mfg, TFTS
-
TFTomSun schrieb:
was muss ich bei der definition der singelton klasse beachten, wo liegen die besonderheiten?
soll ich diese als MFC klasse definieren? welche Basisklasse sollte ich wählen? wozu dient die automatisierung?
mfg, TFTS
Nein, die Singelton klasse musst du nicht als MFC Klasse definieren.
Sie kann aber MFC Klassen als Member enthalten.class Singleton { private: /* Hier dann die Daten rein */ int a,b,c; ~Singleton(); public: static Singleton& Instance() { static Singleton instance; return instance; } void SetDaten(int A,int B,int C) { a = A; b = B; c = C; } void GetDaten(int& A, int& B, int& C) { A = a; B = b; C = c; } };
Singelton& instance = Singelton::Instance(); instance.SetDaten(1,2,3); int a,b,c; instance.GetDaten(a,b,c);
Devil
-
danke!
noch eine frage ... wie mach ich das bei feldern. ich hab hier ein paar CString Arrays. da möchte ich natürlich nicht jeden wert einzeln übertragen sondern am liebsten das gesamte array mit einem zug
noch etwas du hast jetzt SetDaten(1,2,3) geschrieben... ich möchte aber gern direkt a,b,c setzen müsste ich dann vielleicht SetDaten(*a,*b,*c) reinschreiben? sorry wenn das totaler quatsch sein sollte.
mfg, TFTS
PS: ich glaub das ist totaler quatsch, da damit ja die speicheradresse von a, b und c übergeben wird, richtig?
-
Das ist selbstverständlich nur ein Beispiel, denken muss man selber
Du kannst natürlich auch
int GetA();int GetB();/.../
machen, und den wert jeweils zurückgeben.
Arrays solltest du entweder dann in einer SetFunktion anlegen
im Singelon, und den Pointer aufs erste element zurück geben,
oder direkt nur den Pointer auf das Array übergeben.Devil
-
ich hab es jetzt so gemacht:
int a,b,c,x,y,z; Daten instance; a=1; b=2; c=3; instance.SetDaten(a,b,c); instance.GetDaten(x,y,z);
und es funktioniert. Bei den Arrays bräuchte ich aber glaub noch ne kleine hilfe
-
int *a; int *p = new int[5]; a = p;//a zeigt jetzt auf p, und kann damit auf das array zugreifen.
Du erzeugst das Array also entweder mit new in einer dialog Klasse,
oder machst es im Singelton und übergibtst vorher die größe des arrays.Devil