Dialoge, mal wieder...



  • Moin, moin,
    hab da mal eine kleinere Frage, hab hier im Forum schon geschaut und auch einige Tuts durchsucht, aber keine befriedigende Antwort erhalten...
    Ich versuche ein dialogbasiertes Programm zu schreiben, soweit so gut, so lange ich nur einen Dialog hab 😉 Ich hätte nun aber gerne mehrere mit vc++ erstellte Dialoge verknüpft, also wenn ich auf den Knopf in idd_dialog1 drücke soll idd_dialog2 aufgehen.... soweit verständlich?
    Wie auf Knopfdruck eine Messagebox aufgeht usw. ist mir klar, aber da ich noch Anfänger bin hakts bei obigen irgendwie und entweder gehts net oder es ist so einfach das ich das nirgends finde 😉

    Hoffe mir kann noch geholfen werden und ich bin kein allzu hoffnungsloser Fall, war halt bisher eher der Konsolenprogrammierer 😉

    Gruß
    Pete



  • 1.du erstellst diverse dialoge im editor
    2.du erstellst für jeden dialog ne klasse(im dialogeditor rechtsklick->klassenassistent)
    3.du bindest dialog2.h in dialog1.h ein
    4.doppelklick auf einen button in dialog1-> onklickbutton funktion wird erzeugt
    5.in der onbutton funktion:

    dialog2 dlg;
    dlg.DoModal();
    

    das wars



  • Super, vielen Dank für die schnelle Hilfe, hat geklappt 🙂



  • Hmmm, soweit alles klar, die Dialoge werden verschachtelt aufgerufen so wie ich mir das wünsche...
    das einzige Problem ist, das ich nun eine Variable (bzw. eine Klasse) hab die in allen Dialogen verfügbar und veränderbar sein soll.... und irgendwie will mir das wieder mal net gelingen....
    Kann ich irgendwo eine globale Variable für alle Dialogs-Fenster definieren? Oder muss ich eine im Ursprungsdialog definieren und dann immer diese mit hin und her übergeben?
    So oder so: wie? 😕



  • vielleicht versuch ichs mal genauer zu erklären wo mein Problem liegt...
    hab nun 5 Dialoge folgendermassen aufgebaut:

    .................Dialog1
    ................/.........\
    .......Dialog2.........Dialog3
    ......../......\
    Dialog4..Dialog5

    Punkte bitte wegdenken, is etwas unübersichtlich, ich weiss, aber das Forum kastriert die Leerzeichen....

    Nun habe ich ein Objektarray mit drei Werten pro Objekt, diese Objekte können in Dialog1 mit Werten gefüllt werden (durch Laden der Werte) oder durch Neueingabe in Dialog3.
    Dialog2 soll nun eine Übersicht liefern aus der wiederum ich mittels den Dialogen4 und 5 Einträge hinzufügen oder löschen/bearbeiten kann.

    So weit so gut, das sind zumindest meine Vorstellungen... Aber dazu bräuchte ich meiner Meinung nach nun entweder einen globalen Objektarray oder ich muss halt den Objektarray jedesmal übergeben... aber da scheiter ich halt schon die ganze Zeit... bin halt Anfänger.... *versteck*
    Das Werte "abwärtskompatibel" sind, also ich in Dialog1 die Eingaben von Dialog3 nutzen kann weiss ich, aber das bringt mich auch irgendwie net weiter....

    Und so langsam scheine ich senil zu werden da ich auf meine eigenen Posts schon antworte..... 😮



  • Du musst irgendwo deine Daten speichern. Ob in einer Variable oder eine eigene Klasse überlasse ich mal dir. Diese Klasse/Var muss du jedem Dialog übergeben bzw. kannst du dem Dialog einen Zeiger auf die Mutterklasse geben und dann auf die VAR/Klasseninstanz aus der Mutterklasse darauf zugreifen.
    Möglichkeiten gibt es deren viele.



  • Hmmm, könntest du mir ein konkretes Beispiel geben wie ich unter 2 Dialogen somit kommunizieren kann? Am besten per Klasse, so wie ich das sehe...
    denn irgendwie hakts hier noch und aus 10 Zeilen Quellcode kann ich irgendwie mehr lernen als aus 100 Seiten Erklärungen....



  • Erstelle eine neue Klasse mit irgendeinem Namen z.B. CMotherClass

    Ich nehme mal an Du hast in deinen Dialogen CString Werte wie zb von einem Editfeld oder so.
    Lege in der CMotherClass alle CSTRINGS an welche Du in ALL Deinen Dialogen verwendest. In Dialog 1 hast Du zum Beispiel m_strEdit1 und in Dialog2 und 3 hast du m_strText23 und m_strCombo.

    Also musst Du in CMotherClass jetzt 3 Strings unter PUBPIC anlegen:

    public:
        CString m_strEdit1;
        CString m_srtText23;
        CString m_strCombo;
    

    Wenn Du in Dialog1 nun etwas im Editfeld eingegeben hast und per "Knopfdruck" speichern möchtest, damit die Variable übernommen wird und in den weiteren dialogen weiterverwendet werden kann, das geht so:

    ((CMotherClass*)GetParent())->m_strEdit1 = m_strEdit1;
    

    Das speichert den aktuellen Inhalt von m_strEdit1 in die PUBLICVARIABLE welche ebenfalls m_strEdit1 heisst. In den Dialogen 2 und 3 zum speichern, änderst du m_strEdit1 einfach jeweils auf die anderen werte. (Bsp: anstatt m_strEdit einfach m_strText23... )

    Und SO ruft man in einem ANDEREN Dialog (egal welkcher) die Daten wieder ab und kann sie weiterverwenden:

    CString var1;
    CString var2; // Jenachdem wie viele Variablen Du abrufen willst, PRO VARIABLE brauchst Du EIN CSTRING! (Bsp von CString var1 bis CString var 10 für 10 Vars.
    
    var1 = ((CMotherClass*)GetParent())->m_strEdit1;
    var2 = ((CMotherClass*)GetParent())->m_strText23;
    
    //Dies holt jetzt die gespeicherten Werte von Dialog1 (Editfeld) und Dialog2 (Textfeld) in DIESEN aktuellen Dialog und man kann Sie nun weitervwerwenden.
    
    //Hier kannst Du anstellen mit den variablen was Du willst. ACHTUNG! m_strEdit1 von DLG1 ist HIER jetzt weiterzuverwenden mit dem String "var1"!
    

    Nun kannst Du die werte aus Dialog1 und 2 hier weiterverwenden. Was dabei zu achten ist, hier heisst es nicht m_str... sondern var1, var2, also die Cstrings welche Du definiert hast.

    Ich hoffe ich hab Dir somit helfen können.

    ➡ Oder hab ich Dein Prob falsch verstanden?? 😕

    PS: Mit dieser Methode kannst Du auch werte von Checkboxen und allen anderen Steuerelementen weitergeben. (soviel ich weiss??) <-- ist diese Aussage falsch, korrigiert mich bitte 😉

    mfg
    Pro



  • hmmm, scheint irgendwie auch net so recht zu klappen..., wenn ich es so mache wie du sagst dann ist für den Rechner CMotherClass ein undeclared identifier....
    Hab die Klasse CMotherClass in eine eigene header-datei gepackt...
    aber muss ich die nun irgendwo noch einbinden oder sowas?
    Ich hab nun nur noch einen Hauptdialog und einen Nebendialog, vom Hauptdialog sollen ein paar strings an den Nebendialog geschickt werden, dort kann man die Werte in den Edit Boxen verändern um dann die neuen Werte wieder zum Hauptdialog zurückzuschicken.... Kann das denn wirklich so schwer sein? 😕 😮



  • musst auch die header datei von motherclass in die klasse wo du sie verwendest includen!


Anmelden zum Antworten