ComboBox



  • Ich hab da ein sehr komisches Problem mit meiner Combobox.

    Ich habe eine ComboBox erstellt und will die Daten beim start des Programms automatisch laden (warum? weil das programm zwischen verschiedenen geräten automatisch wählt). Dies will/wollte ich mit .AddString() oder .InsertString() erledigen.

    OnInitDlg()
    ...
    
    if(...)
    {
    	GetDlgItem(IDC_SEG1)->EnableWindow(true);
    	GetDlgItem(IDC_SEG2)->EnableWindow(true);
    	GetDlgItem(IDC_SEG3)->EnableWindow(true);
    	GetDlgItem(IDC_SEG4)->EnableWindow(true);
    
    	m_block.AddString("test");
            //bzw
            m_block.InsertString(0,"test");
    
    } //usw
    

    und zum schluss halt nen UpdateData(false)

    So eigentlich sollte er mir daten reinpacken, aber es erscheint nichts.
    Die List ist lang genug...hab sie recht groß gestaltet.

    Weiß einer Rat?

    Danke schonmal



  • Uruk-h4j schrieb:

    und zum schluss halt nen UpdateData(false)

    Da du mit Controlvariablen arbeitest, ist das nicht nötig.
    Sollte aber auch nicht schaden, jedenfalls nicht in diesem Fall.

    Wird der Code in der if denn ausgeführt? 🙂



  • jap...der code wir ausgeführt und auch die weiteren schritte klappen ohne probleme.

    EDIT:
    Mir ist gerade eingefallen, das ich auch darin eine int-var erstelle...geht dann der eintrag "test" überhaupt???


  • Mod

    Und was returniert AddString bzw. InsertString?

    Hast Du nur eine Control-Variable für m_block definiert oder auch ein Datenfeld?

    Zwei Sachen sind hier einfach zu beachten:
    1. Wen Du in OnInitDialog eine Control Variable verwendest, dann musst Du mindestens einmal bereits UpdateData mit FALSE aufgerufen haben, sonst ist die Control-Variable nicht gefüllt. Ein Zugriff auf die Control-Variable würde mit einem ASSERT quittiert werden.
    2. Hast Du im DoDataExchange auch noch eine Daten-Variable zugeordnet und möchtest dennoch die ComboBox erst in OnInitDialog füllen dann muss man UpdateData(FALSE) zweimal aufrufen. Beim erstenmal wird nur die Control-Variable gefüllt. Nun läuft der OnInitDialog ab und füllt die ComboBox. Nun erfolgt der zweite Aufruf von UpdateData(FALSE) und nun kann die Datenvariable den Eintrag in der ComboBox setzen.
    3. Man kann den zweiten Fall vereinfachen, wenn man das Füllen der ComboBox auch in DoDataExchange verlagert. Einfach prüfen ob !m_bSaveAndValidate und prüfen ob die ComboBox evtl. schon gefüllt ist. Ansonsten Daten reinschieben und danach normalen DoDataExchange Code ausführen.



  • Dummheit sollte bestraft werde 😢

    Ich hab das nochmal alles überflogen und festgestellt, das ich das NUR in eine meiner if-anweisungen getan hab. TROTTEL, aber auch mit leib und seele.
    Aber trotzdem Danke für die Hilfen!

    Wer lesen kann ist klar im vorteil ^^



  • Wenns in beiden Zweigen einer if ausgeführt werden soll, machs lieber vorher oder hinterher.
    Und fürs nächste Mal: Einfach auf die verdächtigen Zeilen nen Breakpoint setzen und wenn du ungebremst durchrennst, dann weißt du, wo der Fehler liegt. 😉



  • jup ich werds mir merken...problem war ja, dass in jeder if-anweisung andere Daten drin stehen sollen. Darum hab ich das mal eben übersehen...

    Außerdem ist hier heute so wenig los ^^


Anmelden zum Antworten