Auf Elemente von Unterforms zugreifen.
-
Hi!
Ich habe ein Object mit einem Array von Dialogen (ein TabCtrl) dass ich beim programmstart 'befuelle'.
So, jetzt muesste ich auf die Controls dieser Fenster zugreifen koennen. Leider schlug das bisher fehl - mein Code sieht derzeit so aus:
cTabDlg3 tmp = m_TabCtl.m_Dialog[2]; tmp.m_Levels.DeleteAllItems( ); for(int nLevel = 0; nLevel < gameInfo.m_nNumLevels; nLevel++ ) { WriteConsoleString( gameInfo.m_szLevels[nLevel] ); sWorld = gameInfo.m_szLevels[nLevel]; if( !sWorld.IsEmpty( )) { tmp.m_Levels.InsertItem( tmp.m_Levels.GetItemCount( ), sWorld.Mid(nCropLength) ); } }cTsabDlg3 ist die Klasse, die ich meinem Dialog spendiert habe - m_tabCtl ist das TabObjekt und m_Dialog[2] das Array,das CDialog als Type hat. Der Index ist der richtige, aber irgendwie wird das Listcontrol auf dem Dialog nicht befuellt mit diesem Code.. alles andere funktioniert mit einer Liste im Hauptfenster - also daran sollte es auch nicht liegen duerfen...
Hat jemand eine Idee?
-
Das macht man nicht so. Man kapselt das UI von den Daten.
Schreibe eine Funktion in der entsprechenden Dialogklasse, die die Daten übergeben bekommt. Diese füllt dan die Daten in das Control ein.
-
Ah, danke - da kam *hust* das Jahrelange visual Basic training durch ^^
-
Hm, hab jetzt funktionen in die klasse eingebaut - aber es wird noch immer nicht aktualisiert

Gibts da noch irgendeinen Trick zu?
-
Wie hast Du es denn nun gemacht?
Zeig mal etwas Code...
-
Ok.. Code sieht so aus:
Erstellen der Dialoge:
cmdTabs::cmdTabs() { .... m_Dialog[2] = new cTabDlg3() ; } cmdTabs::~cmdTabs() { } void cmdTabs::InitDialogs() { ... m_Dialog[2]->Create(m_DialogID[2],GetParent()); }Damit sollte der Dialog erstellt sein - und er wird auch in den Tabs dargestellt.
Dann versuche ich im Moment wie folgt auf die Listbox im inneren zuzugreifen:
cTabDlg3 * tmp = (cTabDlg3 *)m_TabCtl.m_Dialog[2]; tmp->DeleteAllItems( ); for( nLevel = 0; nLevel < gameInfo.m_nNumLevels; nLevel++ ) { //WriteConsoleString( gameInfo.m_szLevels[nLevel] ); sWorld = gameInfo.m_szLevels[nLevel]; if( !sWorld.IsEmpty( )) { tmp->AddLvl ( tmp->GetItemCount( ), sWorld.Mid(nCropLength) ); } }Bitte nicht hauen wegen den Pointerdingern.. hab keinerleid ahnung, ob das so gemacht werden soll oder nicht, aber da "m_Dialog[]" als "CDialog *m_Dialog[3];" definiert ist dachte ich, dass ich dann bei Pointern bleiben sollte..
Ansonsten habe ich DeleteAllItems und so weiter als Public Methode in cTabDlg3 definiert.. Danke schonmla im vorraus fuer Hilfe :0)
-
du musst auf die WND Proc zugreifen...
bist glaub ich echt ein anfänger...

-
Ach, man merkt, dass ich mich erst seit ein paar Wochen mit C++ beschaeftige? ;0)
Kann mir denn jemand sagen, was ich genau tun muss?
-
cTabDlg3 * tmp = (cTabDlg3 *)m_TabCtl.m_Dialog[2]; tmp->DeleteAllItems( ); for( nLevel = 0; nLevel < gameInfo.m_nNumLevels; nLevel++ ) { //WriteConsoleString( gameInfo.m_szLevels[nLevel] ); sWorld = gameInfo.m_szLevels[nLevel]; if( !sWorld.IsEmpty( )) { tmp->AddLvl ( tmp->GetItemCount( ), sWorld.Mid(nCropLength) ); } }
-
Ok, interessanterweise passiert auch nichts, wenn ich versuche Items in die Liste zu schreiben, wenn ich die Items via button von diesem Dialog aus schreibe... *kopfkratz* das ist jetzt langsam doch komisch...