ComboBox Füllen



  • Hallo

    Ich habe ein problem mit der ComboBox mit "Dropdown-Listenfald". Und zwar möchte ich eine VARIABLE so übergeben, dass sie als Eintrag drin steht (die Variable nehm ich aus der Registry). Mein problem ist nun WIE ?

    Ich hab einen VALUE CString probiert und eine CONTROLL Variable. Allerdings überträgt sich nichts. Mein Tutor hat auch keinen Ausweg gewusst und nun wende ich mich an die Profis des Fachs 🙂

    DAnke



  • Die Control Variable hat eine Funktion AddString. Damit geht das.



  • wenn ich mich einmischen darf,
    hab dasselbe problem.

    Habs so gemacht:

    m_dPFilterDlg.m_ControlPerson.AddString("Vorname Nachname");
    

    bzw. auch mit einer Variable

    Es kommt aber nur die Fehlermeldung:

    Debug Assertion Failed
    File: afxwin2.inl
    Line: 735

    was heißt das?



  • Zu ASSERT kannst du da was lesen. 🙂
    Ich vermute, du hast die Funktion an einer Stelle aufgerufen, wo die Combobox noch nicht existiert.
    Schieb die Zeile mal hinter die Zeile

    CDialog::OnInitDialog();
    

    Solltest du keine OnInitDialog haben, erstelle sie.



  • Also wenn ich das so probiere:

    m_dPFilterDlg.m_ControlPerson.AddString("test123");
    

    Dann kommt erst eine ASSERT Fehlermeldung und dann sofort eine Windows-Fehlerberichtserstettungsmeldung...HILFE

    P.S. das mit den asserts kappier ich irgendwie nicht so recht 😢



  • Drück beim ASSERT mal "Wiederholen" und zeig den Code wo der grüne Pfeil steht.
    Hast du das mit dem OnInitDialog gelesen und nachgeschaut?



  • Ich habs auch mit dem OnOnit probiert, aber da kam auch nur die blöde Fehlermeldung. Muss ich irgendwas besonderes bei der ComboBox einstellen? Da steht was mit BESITZERZEICHNUNG und ENTHÄLT ZEICHENFOLGE.



  • Nene, das brauchst du für nen einfachen String nicht einschalten. Das brauchst du, wenn du die Einträge selber zeichnen willst, weil du z.B. andere Farben pro Eintrag willst.

    Kannst du mal die Funktion bitte zeigen? So ohne Code fischt man sehr im Trüben.



  • Hmmm...ok dann lass ich die dinger mal aus.

    hier ist mal der Code:

    void CSteuerungDlg::OnEinstellungenSetup()
    {
    	UpdateData(true);
    	m_SetupDlg.DoModal();
    
    	m_SetupDlg.m_cPort.AddString("test");
    //	RegAdd("Software\\PROJEKTARBEIT\\Einstellungen","Port",m_SetupDlg.m_Port);
    //	RegAdd("Software\\PROKEKTARBEIT\\Einstellungen","Auto",m_SetupDlg.m_AutoRun);
    
    	UpdateData(false);
    
    }
    


  • Autsch. 😮

    Okay... Nach DoModal ist der Dialog zu, tot, raus aus dem Speicher.
    Du versuchst auf was zuzugreifen, was nicht mehr da ist.
    Vorher wird auch nicht klappen, weil es noch nicht da ist.

    Du kannst die Combobox nur in der Dialogklasse selber nach CDialog::OnInitDialog füllen. Von draußen geht nur über Umwege.



  • Also soll ich das ganze jetzt im Extra-Fenster machen ?



  • Öhm nein. Du hast doch eine Dialogklasse und in dieser Klasse muss das Füllen der Combobox stattfinden und dann auch noch an der richtigen Stelle.

    Wie estardu schon geschrieben hat: vor dem DoModal existiert die Combobox noch nicht als Fenster -> ergibt also Fehler. Nach dem DoModal ist der Dialog ja schon wieder zu, also ist da die Zuweisung auch sinnlos.

    Du könntest deinem Dialog eine Variable CString spendieren( oder sogar ein Array für Mehrfacheinträge)und dazu ne setComboboxContent-Methode. In dieser wird die Membervariable, die du selber angelegt hast, beschrieben.
    Dann überschreibst du in deiner Dialogklasse die OnInitDialog und nach dem Aufruf von CDialog::OnInitDialog in dieser Methode füllst du die Combobox mit den Werten, die in deiner MEmbervariable stehen, welche du vorher mit set... belegt hast.



  • Uruk-h4j schrieb:

    Also soll ich das ganze jetzt im Extra-Fenster machen ?

    Wenn du mit "Extra-Fenster" den Dialog meinst: Ja.
    Sonst nein - Pellaeon hats erklärt.



  • So habs hinbekommen. Zwar nicht so wie geplant, aber es funktioniert.
    Danke an euch !


Anmelden zum Antworten