CListBox-Probleme



  • Ich habe in einer dialogbasierten Anwendung eine Listbox eingefügt und möchte nun natürlich ihren Inhalt bearbeiten. Ich habe also meiner Dialogklasse eine entsprechende Controll-Variable vom Typ CListBox hinzugefügt (hinzufügen lassen).
    Der erzeugte Code sah so aus:

    class MyDlg //...
    {
    public:
       CListBox mListIP;
       //...
    }
    
    void MyDlg::DoDataExchange(CDataExchange* pDX)
    {
       // ...
       DDX_LBIndex(pDX, IDC_LIST_FRIENDS, mListIP);
       // ...
    }
    

    Hier trat schon ein Fehler auf, da DDX_LBIndex eine int-Variable möchte. Also habe ich eine neue Membervariable (int) angelegt und diese übergeben (anstelle von mListIP). Habe ich das richtig gemacht?

    Möchte ich nun einen String zu meiner Box hinzufügen, so rufe ich auf:

    // habe es mit CString, char* und einem statischen String probiert
    mListIP.AddString(txt);
    

    Leider kommt dann, wenn diese Zeile ausgeführt wird, so eine Systemfehlermeldung (eine der Art, wenn man irgendeinen Speicherzugriffsfehler produziert, irgendetwas falsches mit Zeigern anstellt).



  • Naja ... wenns ne ControlVariable sein soll musst du auch DDX_Control nutzen ...



  • Naja, ControlVariable nenne sich doch die, die irgendwelchen Feldern oder Buttons zugeordnet sind, aber ich verwende doch dann 'value' und nicht 'control'.

    EDIT: Uh, funktioniert tatsächlich. Thx! 😃



  • Evolver schrieb:

    Naja, ControlVariable nenne sich doch die, die irgendwelchen Feldern oder Buttons zugeordnet sind, aber ich verwende doch dann 'value' und nicht 'control'.

    Nein, alle Variablen werden deinen Feldern zugeordnet. Die Unterscheidung liegt in der Art der Variablen (und letztlich auch ihrer Verwendung) - CWnd-Derivate (CListBox, CEdit, CStatic,...) sind Control-Variablen, ebene Datentypen (CString, int,...) sind Value-Variablen.



  • CWnd-Derivate (CListBox, CEdit, CStatic,...) sind Control-Variablen, ebene Datentypen (CString, int,...) sind Value-Variablen.

    Und mein Fehler lag darin, genau das nicht zu wissen. Aber jetzt hat sich mein Zustand ja etwas gebessert ;).


Anmelden zum Antworten