Dialog öffnen

Mastermind

Grünschnabel
Sorry für den Doppelpost! Der Theard im C++ Forum kann gelöscht werden,Danke:

Hallo Tutorial.de- User,

ich hoffe ihr könnt mir weiter helfen. Hab gerade mit C++ begonnen, also noch absolut der Anfänger!
Ich hab eine MFC-Anwendung(exe) erstellt, nur basierend auf Dialogfenstern. Nun habe ich mein erstes Dialog- Fenster wie gewünscht gestaltet und mit einem Button Names "Fertig" versehen. Dann hab ich mittels Einfügen -> Neue Klasse -> Formularklasse ein neues Dialogfenster erstellt mit dem Namen "IDD_ZT_DIALOG".
Nun möchte ich mit den Button "Fertig" vom Dialog1 den Dialog "IDD_ZT_DIALOG" aufrufen. Mit welchen Code muss ich da arbeiten? Welchen ich dann, so schätz ich mal hier einfügen muss:


Code:
void CZensurenDlg::OnFertig() 
{
// Code- Bereich für meinen "Fertig"- Button
}

Und noch was, die Variablen die ich im Dialog1 verwendet habe, muss ich dir irgendwie mit übergeben, falls ich damit weiter arbeiten will.

Ergänzung: Arbeite mit VisualStudio v6!

Danke,
Mastermind
 
Hi,

schau auch die Antworten zu diesem Thread :
http://www.tutorials.de/forum/visualstudio-mfc/271461-neue-dialoge-per-button-und-wertuebergabe.html

Ich denke, die Methode ist dein Eventhandler für den Button, mit dem du deinen zweiten Dialog starten möchtest.

Wenn dein zweiter Dialog z.B. CDlg2 heisst, dann :

Code:
void CZensurenDlg::OnFertig() 
{
    CDlg 2 dlg;
    if( dlg.DoModal() == IDOK ) {
        // OK Button wurde gedrückt.
    }
    // Code- Bereich für meinen "Fertig"- Button
}

du musst die Klassendefinition natürlich dem Code bekannt machen.

Code:
#include "Dlg2.h"


Übergabe von Rückgabe von Werten machst du entweder über
Konstruktorüberladung,
Code:
    CDlg2 dlg(CString value1, int value2);
    dlg.DoModal();
Public Setter und Getter Methoden
Code:
    CDlg2 dlg();
    dlg.setValue1(myValue1);
    dlg.doModal();
    int returnValue = dlg.getValue1();

oder Public Variablen...
Code:
    CDlg2 dlg();
    dlg.value1 = myValue1;
    dlg.doModal();
    int returnValue = dlg.value1;

So, denke, dass du damit weiterkommst ;-)

Viel Erfolg,

Peter

Ach ja, du könntest deinen Beitrag im C/C++ Forum ja schon mal als erledigt markieren. Dann guckt da net jeder drauf ;-)
 
Zuletzt bearbeitet:
Hallo,

das mit dem Dialogfenster öffnen hat wunderbar geklappt, doch das übergeben von Variablen nicht so.
Im Dialog1 habe ich ein Eingabefeld mit der Member-Variablen vom Typ CString:
m_1LF <- diesen Wert will ich an das zweite Dialogfenster übergeben:

Code:
Dialog2 dlg(CString m_1LF);
dlg.DoModal();

funktionier leider so nicht :(
 
Jo,

Dein Aufruf ist net ok.

Code:
    // Dialog2 dlg(CString m_1LF);
    Dialog2 dlg( m_1LF);


und 'n bissl musst du natürlich auch dazu coden ;-)

z.B. Den Konstruktor überladen.

In Dialog2.h
Code:
..
     CDialog2(); // Standardkonstruktor <== Wenn du den löschst, zwingst du jeden dazu, die überladene Methode zu verwenden 
     CDialog2(CString s); // Überladener Konstruktor, der einen String erwartet
..

private:
    CString myValue;

}

in Dialog2.cpp
Code:
CDialog2::CDialog2() { //Implementierung des Standardkonstruktors

}
CDialog2::CDialog2(CString s ) { // Implementierung Überladener Konstruktor
    myValue = s; // Hier speicherst du die übergebene variable irgendwo
}

Wenns net geht, arbeite einfach mit den public Variablen!! Das ist am einfachsten ;-)

Viel Erfolg,

Peter
 
Zuletzt bearbeitet:
ich dank dir für dein bemühen, aber ich bekomm es irgendwie nich hin :(
Auch das Public- Ding will nicht so richtig.
Das kann doch nicht so schwer sein ne Variable m_1LF an den Dialog2 zuübergeben :suspekt: :suspekt: mennoo ...^^
 
Aber Hallo,

du musst schon etwas konkreter werden, wenn etwas bei dir net läuft!

Poste hier die Compiler- oder Linkerfehler rein und die Laufzeitfehler!

Auf Aussagen wie 'ich bekomm es irgendwie nich hin' oder 'will nicht so richtig' wirst du nicht viel Qualifizierte Hilfe finden ;-)

Gruß,

Peter
 
Hehe...hab ich mir schon denken können, das ihr damit nicht viel anfangen könnt, sorry.
Also ich schätze mal das das ganze nicht funktioniert, weil ich die Codes flasch verarbeite.
Die Konstruktorüberladung hat nicht geklappt, da du eh meintest das Public- Setter einfach sei, will ich mich daran versuchen.

Also hab ich mir im Dialog1.h die Stelle mit public: gesucht, und den Code so umgeschrieben wie du gesagt hast: (m_1LF ist die zuübergebende Variable)

Code:
public:
    CZensurenDlg(CWnd* pParent = NULL);
    void setParam1(int param) { m_1LF = param; }
    int m_1LF;

Dann bin ich in die Dialog1.cpp in die Sektion wo mein Button-Klick verabeitet wird, und habe folgenden Code eingegeben:

Code:
void Dialog1::OnFertig() 
{
int param = 25;
Dialog2 dlg(this);
dlg.setParam1(param); 
dlg.DoModal();    
}

Wenn ich das Programm nun starte kommt Fehlermeldung über Fehlermeldung...würde den Rahmen dieses Fensters hier sprengen ;) Vielleicht könnt ihr ja mal über den Code und Verarbeitung drüberschaun. Danke
 
Hi,

du musst die Setter Methode doch in der Dialogklasse definieren, an die du den Wert übergeben willst.

So wies aussieht, hast du in der Klasse CZensurenDlg die Methode setParam() deklariert.

Aber in dem darunterliegenden Code rufst du die setParam-Methode der Klasse Dialog2 auf!

Besitzt Dialog2 auch eine setParam-Methode?

Wenn du den Thread noch mal genau durchliest, kommst du schon noch drauf ;-)

Viel Erfolg,

Peter
 
Auch nach mehrmaligen durchlesen steig ich nicht dahinter.

Ich habe zwei Dialoge, der erste heißt: CZensurenDlg und der zweite heißt: ZensurenTabelle

Im 1.Dialog(CZensurenDlg.cpp) gibt es einen Button mit dem Name "Fertig", wenn ich den nun klicke öffnet sich auch der zweite Dialog(ZensurenTabelle):

Code:
void CZensurenDlg::OnFertig() 
{	
	ZensurenTabelle dlg;
	dlg.DoModal();
}

Nun will ich die Member-Varialbe "m_1LF" übergeben, dazu erweitere ich den code vom Dialog1(CZensurenDlg.cpp) wie folgt:confused:

Code:
int param = 25;
CZensurenDlg dlg(this);
dlg.setParam1(param); 
dlg.DoModal();

Doch jetzt wird doch beim klicken des "Fertig"- Buttons der Dialog ZensurenTabelle garnicht aufgerufen?
Das kann doch nicht simmen? Oder doch?! :confused: :confused:
 
Hi,

also nochmal ganz konkret :

Ich verstehe nicht, was du da versuchst.

In dem ersten Code-Schnipsel startest du den Dialog 'ZensurenTabelle'.

In dem zweiten startest du den Dialog 'CZensurenDlg'. <= Also du startest den selben Dialog erneut! Willst du bestimmt nicht !

Also, arbeite mit public variablen! Das ist wie schon vorher bemerkt am einfachsten.

In deiner Datei ZensurenTabelle.h

Code:
    ..
public:
    int m_intMemberOfZensurenTabelle; // <= meine als public deklarierte Membervariable
    ..


In deinem Code in ZensurenDlg.cpp ( Eventhandler für Button-Klick )

Code:
    int     meinIntWert = 25;
    ZensurenTabelle dlg;
    dlg.m_intMemberOfZensurenTabelle = meinIntWert; // <= Du schreibst direkt in die membervariable des zu öffnenden Dialogs. geht, da als public deklariert.
    dlg.DoModal(); // Dialog starten
    int dialogReturnValue = dlg.intMemberOfZensurenTabelle; // <= So liest du die public-variable anschließen wieder aus!

Wenn du es jetzt immer noch nicht hinbekommst, weiss ich es auch net...

Viel Erfolg,

Peter
 

Neue Beiträge

Zurück