Programmabbruch bei CComboBox nach Parameterübergabe
-
Hi,
Ich habe ein (für mich unerklärliches) Problem.
Ich habe eine Membervariable vom Typ CComboBox, das ich mit werten füllen möchte.
Auf der Hauptmaske mache ich den Connect auf eine Datenbank, und übergebe die Parameter auf eine andere Klasse/Maske.
Die Werte werden auch vollständig übergeben.
Leider funktioniert das Füllen der CComboBox nicht! Es bricht einfach ab.Die Zeile sieht so aus:
m_ausgabeUser.AddString(m_User[i]);
Der gesamte Konstruktor:
for(int i=llbound; i <= lubound; i++){ m_User[i] = m_aUser[i]; m_ausgabeUser.AddString(m_User[i]); m_ausgabeDate = m_aDate[i]; m_FN[i] = m_aFN[i]; m_Role[i] = m_aRole[i]; m_Date[i] = m_aDate[i]; } for(int j = plbound; j <= pubound; j++){ m_PlanOw[j] = m_planOwner[j]; m_Plan[j] = m_plan[j]; AfxMessageBox(m_PlanOw[j] + m_Plan[j]); }
Ich bin am Verzweifeln, und wäre froh, wenn mir jemand helfen würde.
grüße Tanya
-
Probier den ganzen Aufruf nicht im Konstruktor sondern in der Methode InitialUpdate() (oder so ähnlich);
füge den code genau vorm return ein;das problem ist wahrscheinlich, dass das Element nocht nicht initialisiert ist;
gl
-
hi,
Ich habe lediglich das hier gefunden:
BEGIN_MESSAGE_MAP(UserDetail, CDialog) //{{AFX_MSG_MAP(UserDetail) ON_BN_CLICKED(IDOK, OnBeenden) ON_BN_CLICKED(IDC_BUTTON1, OnZurueck) ON_BN_CLICKED(IDCANCEL, OnNaechsteSeite1) ON_CBN_SELCHANGE(IDC_COMBO3, OnAusgabeUser) ON_LBN_SELCHANGE(IDC_LIST1, OnSelectOutput) //}}AFX_MSG_MAP END_MESSAGE_MAP()
Kann ich das hier einfügen?
-
Bei Dialogfeld-basierenden, MDI oder SDI Projekten gibt es eine OnInitDialog() Methode
BOOL CMeinProjektDlg::OnInitDialog() { CDialog::OnInitDialog(); // Hinzufügen des Menübefehls "Info..." zum Systemmenü. // IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt // wenn das Hauptfenster der Anwendung kein Dialogfeld ist SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen // Hier das mit ComboBox einfügen return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten }
Sollte es diese Behandlungsroutine noch nicht geben, kannst du sie hinzufügen; (allerdings empfehle ich dir, das Projekt vorerst mal zu sichern :p)
In der Klassenansicht rechte Maustaste auf CMeinProjektDlg -> Behandlungsroutine für Windowsnachrichten hinzufügen -> WM_INITDIALOG auswählen, hinzufügen und bearbeitengl
-
Das habe ich jetzt gemacht.
Was genau mach ich denn jetzt vor dem return?Ich erhalte doch meine Parameter durch den Konstruktor.
Wie soll ich dann den Aufruf von OnInitDialog durchführen?Tanya
-
OninitDialog wird automatisch ausgeführt;
soweit ich weis, wird dir kaum was überbleieben, als die Daten irgendwie zwischenzuspeichern oder die Daten erst in OninitDialog von der Datenbank zu lesen...
-
Meine Daten wurde bereits vorher aus einer anderen Klasse übertragen.
So sieht die Anweisung aus der anderen Klasse aus:UserDetail dUI(m_aUser, m_aFN, m_aRole,m_aDate, m_planOwner, m_plan, llbound, lubound, plbound, pubound, this); dUI.DoModal();
Wie kann hier denn die Methode OnInitDialog() aus UserDetail ansprechen?
Der Konstruktor der Klasse UserDetail:
UserDetail(CString* ,CString* ,CString* ,CString* ,CString* ,CString* ,int, int, int, int, CWnd* pParent);
Tanya
-
Was mir gerade einfällt: Die anderen Member, wie dieser hier:
m_ausgabeDate = m_aDate[i];
werden aber gefüllt.
-
OninitDialog kann man glaub ich nicht ohne fehler direkt aufrufen...
Bei normalen Eingabefeldern ist es kein Problem, direkt im Konstrukter den Text zu definieren;Aber bei der ComboBox hatte ich bereits öfters diese Probleme...
wie gesagt:
Im Konstruktor die Pointer/Werte abspeichern, und in OnInitDialog dann die Initialisierung (Übergabe der Werte an die ComboBox) ausführen.Alles ander was nichts mit der ComboBox zu tun hat, kann im Konstruktor ausgeführt werden.
-
Es hat geklappt!
Fühl dich ganz fest gedrückt!
Tanya
-
Addresse ?!
Telefonnummer ?!