ListBox



  • Vielleicht weil das von MS so gewünscht war ?



  • Weil du's nicht über eine Wert-Variable machst denk ich mal. 🙂



  • ich hab nen tutorial geselesen, da stand extra drinn, dass man das mit UpdateData machen muss...



  • BOOL CLstbox::OnInitDialog() 
    {
    int index ;
    m_list.AddString("Mathematik");
    m_list.AddString("Physik");
    m_list.AddString("Informatik");
    m_list.AddString("Chemie");
    m_list.SelectString(index,"Chemie");
    m_list_show="Chemie"; 
    UpdateData(FALSE);
    return TRUE ; // return TRUE unless you set the focus to a control
    }
    

    für was brauch ich int index? was macht SelectString() und was soll m_list_show="" sein? das geht bei mir nicht...



  • Dann ist das TUT SCH.....

    Wenn du Fragern zu Memberfunktionen hast dann schau zuerst in der MSDN nach.
    Und m_list_show ist vermutlich eine Membervariable eines Controls wo man dann auch UpdateData() braucht. Aber da ich kein Hellseher bin kann ich das auch nicht wissen



  • warum so unfreundlich? ich hab ganz normal gefragt...

    und m_list_show is keine member variable, der sagt auch, dass das ein nicht deklarierter Bezeichner ist...



  • ich denke mal du hast im Tutorial die Stelle verpaßt wo die ListBox an eine Membervariable CString "gebunden" wurde. Dann macht nämlich das

    m_list_show="Chemie; UpdataData(false);
    

    Sinn: die aktuelle auswahl steht in m_list_show.

    (Hätte den Vorteil das das Tutorial nicht ganz so SCH ist... 😉 )

    Das SelectString macht aber an der Stelle keinen Sinn - siehe MSDN: Sucht ab index nach dem ersten eintrag der mit "Chemie" beginnt und selektiert diesen...



  • ich hab den beispiel code 1:1 übernommen, und sonst auch alles so gemacht, was da stand. Für mich sieht m_list_show wie eine eigene variable aus, die ich nich deklariert habe. auch sehe ich keinen sinn, was das bringen soll, wenn ich der einen string zuordne...



  • da seh ich ja grad, dass das SelectString ja sowieso schwachsinn ist, da ja index noch überhaupt keinen wert hat...

    oh, geht trotzdem, fängt anscheinend bei 0 an, wenn index nicht initialisiert ist...



  • oh, geht trotzdem, fängt anscheinend bei 0 an, wenn index nicht initialisiert ist...

    Aua Aua Aua

    Nicht initialisiert: im Debug Build mit "definiertem Müll", im Release Build mit "irgendwas". Das kann wirklich "Irgendwas" sein.

    Mal so ein paar Hintergrundinfos, bzgl. des UpdateData und DDX:

    Im Prinzip ist UpdateData nicht nötig. Alle Operationen wie "Text in Edit-Feld setzen", "Listenelement auswählen", "Checkbox abfragen" usw. können "direkt" gemacht werden. So läuft's in der Win32 API, und die MFC-Klassen bieten auch entsprechende, nette Memberfunktionen.

    DDX ("Dialog Data Exchange") erlaubt auf relativ simple Weise, Datenmember (CString, int,....) an bestimmte Controls (Edit, Checkbox, ...) zu binden. Da passiert nicht viel - UpdateData(false) schreibt die Informationen aus den Datenmemmbern in die Controls, UpdateData(true) holt die Info aus den Controls in die Datenmember.
    Intern fügt der Wizard (oder der clevere Programmierer) DDX_xxxx - Aufrufe zur virtuellen DoDataExchange-Methode hinzu, die von UpdateData genutzt wird.

    Nach meienr Efahrung ist UpdateData(true/false) recht sinnvoll für einfache Eingabemasken (Daten reinhacken und OK clicken), versagt aber recht schnell bei komplexeren Dialogen.



  • ok, habich verstanden, und das mit der nicht initialisierten variale habich ja ned programmiert, das stande so im tutorial...


Anmelden zum Antworten