Zum Inhalt springen

Übergabe von Variablen


lunatic82

Empfohlene Beiträge

Hallo,

ich versuche gerade mit der MFC von Windows ein Programm zu schreiben. Dabei soll ein Wer aus dem Parent-Fenster an ein neues Popup-Fenster übergeben werden.

Das Pop-Up-Fenster wird mit folgendem Befehl aufgerufen:

void CGNS_MessengerDlg::OnDblclkUserList1()

{

UpdateData(TRUE);

static CString strUser = m_user;

send_message dlg;

SetDlgItemText(IDC_USER_INFO_EDIT1, strUser); //Problem

dlg.DoModal();

}

So einfach lässt sich der Das Edit-Fenster aber nicht aktualisieren. Wie geht das also??

Björn

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich würde deiner klasse für den zweite dialog eine funktion hinzufügen.

void SetInfo (CString infotext)

{

// m_info = mit Textfeld verknüpfte Variable

m_info = infotext;

}

sofern die funktion nur vor der funktion DoModal aufgerufen wird sollte das funktionieren. ansonsten muß noch ein UpdateData(FALSE) hinzugefügt werden. aber Vorsicht UpdateData nicht aufrufen, wenn das Fenster noch nich existiert!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von maddin:

<STRONG>

void SetInfo (CString infotext)

{

// m_info = mit Textfeld verknüpfte Variable

m_info = infotext;

}

sofern die funktion nur vor der funktion DoModal aufgerufen wird sollte das funktionieren. ansonsten muß noch ein UpdateData(FALSE) hinzugefügt werden. aber Vorsicht UpdateData nicht aufrufen, wenn das Fenster noch nich existiert!!!</STRONG>

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht bringt Dich der Auszug aus der MSDN weiter:

Why can't I DDX/DDV to initialize my CDialog controls?

You can't do anything with the dialog controls until your dialog is created—which doesn't happen until DoModal(). The standard way of overcoming the problems is to create member variables for the data, initialize them before calling DoModal, and then transfer the values in OnInitDialog. Or perhaps in UpdateData(). Much like the ClassWizard member variables do it.

Also: Member-Variablen definieren. Im OnInitDialog() diese Member-Variablen abarbeiten. Man kann einfach keine Parameter direkt übergeben vor dem Aufruf von DoModal().

So have your dialog include a CStringList or CStringArray, put the values for the listbox in that and transfer them to the listbox in OnInitDialog. [Etc....]

Also den Dialog mit einem zusätzlichen Array oder halt einer Stringlist versehen. In diesen kannst Du dann alle Übergabeparameter reinknallen und bei DoModal wird dann der OnInitDialog() ausgeführt. In diesem müssen die Inhalte des Arrays in die Felder des Dialogs eingefügt werden und dann klappts auch mit dem UpdateData, falls man das überhaupt braucht! Diese z.B. mit Dlg.addString(&Wer) füllen.

Init your dialog in OnInitDialog. If necessary, pass a pointer to your document to the constructor of your dialog (and save it in a private/protected m_pDoc member).

Also das mit dem Pointer ist vielleicht auch noch eine Möglichkeit, dann kann man Referenzen vom Parentfenster übergeben und die Daten können sich auch außerhalb des Dialogs befinden (außerdem muß nicht wie wild durch die Gegend kopiert werden).

Das ist jedoch die Qual der Wahl und das hängt vom Programmdesign ab. (Ja soll ich das jetzt so machen, oder so, oder vielleicht ganz anders irgendwie??? Vielleicht würfeln?)

<FONT COLOR="#a62a2a" SIZE="1">[ 24. August 2001 15:59: Beitrag 1 mal editiert, zuletzt von Crush ]</font>

Link zu diesem Kommentar
Auf anderen Seiten teilen

meine idee war die. du hast ja letzendlich zwei klassen, die sich um deine dialoge kümmern hast. nennen wir sie CMainDlg und CViewDlg; in der klasse CMainDlg hast du eine Funktion, die bei einem doppelklick auf die liste ausgeführt wird. über entsprechende eintrage in der messagemap. beispiel:


void CMainDlg::OnDblClickList1()

{

   UpdateData();

   CViewDlg.SetInfo(m_user);

   CViewDlg.DoModal();

}

in der zweiten zeile wird eine funktion von CViewDlg aufgerufen, die die membervariable ändet, die mit dem entsprechenden textfeld verknüpft ist. beispiel:

void CViewDlg::SetInfo(CString info);

{

   m_textfeld = info;

}

dadurch wird nicht direkt der text des steuerelements verändert, was ja wie mein vorredner schon erklärte nicht funktioniert, sondern die entsprechende variable, die mit dem steuerelement verbunden ist. beim aufruf von DoModal() wird dann der wert von der variablen in das steuerelement geschrieben. ähnlich der funktion UpdateData(FALSE);

ich hoffe das das ein wenig verständlicher war.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...