Aus 1.Dialog eine Combobox des 2.Dialogs füllen
-
dlg->m_combo="test"; dlg->UpdateData(false);
-
perfekt, jetz muss ich nur noch wissen, wie ich komplette Felder rüber bekomme... aber ich versuchs erstmal selber. melde mich wenn ich zu dämlich dafür bin
danke!
mfg, TFTS
-
ok ich packs nich. alle varianten die ich per suche gefunden hab, scheinen mir zu kompliziert zu sein. ich will einfach nur mein array in der anderen klasse bekannt machen... sei es durch kopieren,per pointer oder sonste wie...
zusätzlich muss noch die möglichkeit bestehen, dass ich in der 2.dialog klasse einzelne elemente des arrays ändern kann und das natürlich dann auswirkungen auf den array des 1.dialogs hat.mfg, TFTS
-
bin mir jetzt nicht ganz sicher welches problem du hast, aber es geht so:
1. dein erstes dialogfeld wird initialisiert und angezeigt.
2. durch eine aktion (z.b. button drücken) soll dein zweites dialogfeld aufgerufen werden. das machst du so:
C2Dlg.DoModal();
3. In der OnInitDlg() grifst du auf public attribute oder funktionen des ersten dialogfeldes zu. das geht mit:((C1Dlg()GetParent())->Funktion1();
du musst natürlich die dialogfeld-header deines ersten dialogfeldes in dein zweites includen.
so gehts bei mir, schätze dann auch bei dir ;):D
EDIT:
Meinte oben natürlich OnInitDialog() !! sorry
-
wie aber muhkuh schon geschrieben hat. damit ich im 1.dialog funktionen des 2. dialogs aufrufen kann muss ich den 2. dialog nonmodal öffnen.
Ich vermute mal, dass deine variante unter diesem aspekt nicht mehr funktionieren wird zumal dein post auch leicht am thema vorbei war. ich möchte gern im 2. dialog ein array erzeugen, dass den selben inhalt wie das array im ersten dialog hat bzw. ich möchte im 2. dialog zugriffe auf das array im 1.dialog haben. ich seh nicht ganz wo du das thema array behandelstmfg, TFTS
-
TFTomSun schrieb:
ok ich packs nich. alle varianten die ich per suche gefunden hab, scheinen mir zu kompliziert zu sein. ich will einfach nur mein array in der anderen klasse bekannt machen... sei es durch kopieren,per pointer oder sonste wie...
zusätzlich muss noch die möglichkeit bestehen, dass ich in der 2.dialog klasse einzelne elemente des arrays ändern kann und das natürlich dann auswirkungen auf den array des 1.dialogs hat.mfg, TFTS
<yoda>
Einen Zeiger auf das Feld dem 2. Dialog übergeben du musst! Bearbeiten du dieses Feld im 2. Dialog dann kannst.
</yoda>
-
probier mal das oder ähnliches, sollte funzen !
bool ErsterDialog::GetString(CString& str) { static int nCounter=0; nCounter++; switch(nCounter) { case 1: str="Bla"; return true; case 2: str="furz"; return true; default: nCounter=0; return false; } }
BOOL ZweiterDialog::OnInitDialog() { CDialog::OnInitDialog(); // hier iss noch dein code ! CString str; while(((ErsterDialog*)GetParent())->GetString(str)) { m_combo_control.AddString(str); } }
-
was vergessen hab !
void ErsterDialog::Irgendwo() { ZweiterDialog dlg; dlg.DoModal(); }
-
@nonamebody mir gehts um ein array. bei einer normalen variable hab ich keine probleme die zu übertragen.
@muhkuh welchen typs muss der zeiger sein? wie sag ich dem zeiger dass er auf mein array zeigt. wie kann ich in der 2.dialog klasse dann über den zeigen wieder die einzelnen elemente bearbeiten... und überhaupt und wie soll das gehen?
-
Kannst ja ähnlich machen, du weisst doch die anzahl deiner arrayelemente oder ?
bool ErsterDialog::GetString(CString& str) { // nNumberOfEntries = ANzahl der Arrayelemente // astrEntries = CString Array static int nCounter=0; if(nCounter<nNumberOfEntries) { str=m_astrEntries[nCounter]; return true; } else { nCounter=0; return false; } }
Falls es sich um ein CString Array handelt, kannste ja mal die CStringList versuchen !
-
ich will aber nicht jedes einzelne element rüber schicken sondern mit einem schlag sagen können Dialog2Array=Dialog1Array oder im 2.dialog sagen können Dialog1Array[5]="lala"
mfg, TFTS
-
wie kann ich eine combobox füllen/reseten, wenn der dialog schon existiert?
dlg->m_combo_control.ResetContent(); funktioniert da nicht
-
Du musst natürlich nachdem du die Combobox geleert hast, die Oberfläche auch wieder updaten!
die Zauberformel:
dlg->UpdateData(false);
-
nein, das problem ist ja, dass es eine fehlermeldung gibt bei dem ausführen der zeile
ich vermute ich darf das fenster vorher nicht mit
dlg->Create(IDD_LAGER_DIALOG, NULL);
initialisieren. Bloß wie mach ich das dann?
es müsste dann sicherlich sowas ähnliches wiedlg->SwitchTo(IDD_LAGER_DIALOG,NULL);
sein
muss ich die dlg variable trotzdem mit
dlg = new CLagerDlg();
initialisieren?
mfg, TFTS
-
du musst das Fenster mit Create initialisieren
dein Fehler liegt dann irgenwo anders...
sag doch mal, wo du die Combobox "resetten" willst und poste wie du das machst...
bissl mehr Code musst du schon preisgeben!Übrigens: welche Fehlermeldung gibt es denn? Das könnte schon helfen....
EDIT:
dlg->SwitchTo(IDD_LAGER_DIALOG,NULL);
hä?
Was er machen will?
-
ok jetzt mal ganz im detail
ich habe hier meinen alten dialog (das ist also der dialog der beim starten des programms aufgerufen wird)
aus einem neuen dialog heraus, will ich eine combobox des alten dialogs resetenCLagerDlg *dlg; dlg = new CLagerDlg(); dlg->Create(IDD_LAGER_DIALOG, NULL); dlg->ProgrammordnerZuArbeitsordner(); //Variableninitialisierung Firmennr=-1; Spaltennr=0; dlg->Trennzeichen=Trennzeichen; dlg->empty=empty; dlg->m_herstellerfilter_control.ResetContent(); dlg->m_vherstellerfilter_control.ResetContent(); m_ansprechpartner_control.ResetContent(); m_firmenname_control.ResetContent(); dlg->m_hersteller_control.ResetContent(); dlg->m_lieferant1_control.ResetContent(); dlg->m_lieferant2_control.ResetContent();
das ist der code...
durch eine MesssageBox beim Start meines alten dialoges weiss ich, dass das programm nun versucht den alten dialog neu zu erstellen, was natürlich schwachsinn ist, da dieser dialog schon erstellt ist (er ist ja nur im hintergrund) als fehlermeldung bekomm ich dann folgendes:Unbehandelte Ausnahme in Lager.exe! Stack overflow!
ich hoffe das hilft dir etwas.
noch was, ich bin mir ziemlich sicher, dass diese create fkt an dieser stelle falsch sein muss. ich will ja den dialog nicht neu erstellen sondern nur bearbeiten > er existiert ja schon
mfg, TFTS
-
*lala*
-
wahh ich habs... nix mit neu createn
((CLagerDlg*) GetParent())->m_herstellerfilter_control.ResetContent();
das ist die zauberformel... jetz muss ich bloß noch testen, ob ich damit auch funktionen aufrufen und variablen schreiben/lesen kann.
mfg, TFTS