UpdateData und List Control - Konflikt



  • Moin,

    Ich hab ein List Control wo man was auswählen kann dies wird dann in Editboxen angezeigt.

    Nun hab ich das Problem das .GetCurSel() bzw. .SetSel(nPos) von dem List Control nicht mehr funktioniert, wenn ich UpdateData(true) bzw. UpdateData(false) benutze.

    Aber wenn ich dies nicht benutze gehen meine Editboxen ja nicht anzusteuern.

    Code:

    😕 😕 😕 😕

    int nSelectPos = m_CtrlList.GetCurSel();// Selected Feld hohlen - geht
    m_csEditBox = "Hallo Mama!"; // Editboxvariable setzen

    m_CtrlList.SetSel(nSelectPos ); // functioniert nicht
    UpdateData(false); // Um "Hallo Mama!" zu senden
    m_CtrlList.SetSel(nSelectPos ); // auch hier funxtionierts nicht

    😕 😕 😕 😕

    Also mit Functioniert nicht meine ich das nix Ausgewählt ist. Mein List Control ist Einfachauswahl, somit ist GetCurSel() auch functionsfähieg.



  • Ich kenne mich zwar nicht so gut aus, aber mir sind 2 Sachen aufgefallen:

    UpdateData(TRUE)
    
    //und
    
    UpdateData(FALSE)
    
    //Meines Wissens nach wird TRUE und FALSE groß geschrieben?
    

    Aber ich nehme an, dass es bei Dir daran nicht liegt?



  • nein, nein, du kannst es groß oder klein schreiben also entw. true oder TRUE, bzw. false oder FALSE.

    ich glaube aber, der Befehl heisst SetCurSel(int pos);



  • Hallo !

    GetCurSel() gibt doch den Index der aktuellen Auswahl zurück.
    Mit
    int nSelectPos = m_CtrlList.GetCurSel();// Selected Feld hohlen - geht
    speicherst du also den Index (z.B. "5" wenn das sechste Listboxelement ausgewählt wurde) in der Variablen nSelectPos. -> OK

    Dann liest du mit
    m_csEditBox = "Hallo Mama!"; // Editboxvariable setzen
    etwas in die Variable m_csEditBox ein. -> OK

    Dann willst du mit
    m_CtrlList.SetSel(nSelectPos); // functioniert nicht
    irgendeinen Eintrag in der Listbox auswählen. In der Variablen nSelectPos ist aber immernoch der gleiche Wert gespeichert, den du vorhin eingelesen hast ("5" aus meinem Beispiel). Den Index lässt du anzeigen und der ist genau der gleiche, wie der, der sowieso schon angezeigt wird. -> keine Änderung.

    Dann aktualisierst du mit
    UpdateData(false); // Um "Hallo Mama!" zu senden
    die Editfelder. -> OK

    Und jetzt willst du wieder mit
    m_CtrlList.SetSel(nSelectPos ); // auch hier funxtionierts nicht
    etwas in der Listbox auswählen, obwohl sich die Variable nSelectPos immernoch nicht geändert hat. Es wird also schon wieder NIX NEUES ausgewählt. -> keine Veränderung zu sehen

    Du hast keine Verbindung zwischen der ListBox und dem Editfeld !
    Du könntest z.B. mit GetText() oder so nach einem Eintrag in der ListBox suchen, nachdem du das Editfeld in eine Variable ausgelesen hast.
    Das mit dem Index (nSelectPos) wird wohl nicht klappen, da dieser dem Editfeld völlig unbekannt ist...

    Tschüss



  • Also,...
    ...um mal von Vorne anzufangen, ich möchte eigendlich an der Selection nichts verändern. Hatte nur SetSel(*) damit die Selection da bleibt wo sie ist, denn sobald ich UpdateData(false oder true) benutze verschwindet meine Selection merkwürdiegerweise. Aber dies geschieht auch wenn ich sie wider versuche zu senden.

    Ich dachte immer das dies funktionierem müsse:

    😮 😮 😮 😮
    int nSelectPos = m_CtrlList.GetCurSel();// Selected Feld hohlen - geht
    m_csEditBox = "Hallo Mama!"; // Editboxvariable setzen
    UpdateData(false); // Um "Hallo Mama!" zu senden
    😮 😮 😮 😮

    Aber leider ist nach diesem Code kein Feld im List Control mehr ausgewählt.



  • kann es sein, dass du ein ListBox und nicht ein ListCtrl benutzt??
    bei einem ListCtrl gibt es 'GetCurSel' überhaupt nicht.
    Da muste dann schon 'CListCtrl::GetSelectionMark' benutzen, um die Positionen des aktuell selektierten Items zu bekommen.



  • Ähm,... NEIN!!!...
    ...es gibt GetCurSel() und es funktioniert auch solange ich nicht UpdateData in irgeneiner for benutze... Sobald ich UpdateData benutze liefert mir GetCurSel immer -1 zurück.

    Ich verzweifel schon fast. Könnte es auch daran liegen das die beiden Funktionen (UpdateData und GetCurSel) zusammen koledieren?

    * 😕 *



  • es tut mir leid, aber
    CListCtrl::GetCurSel existiert nicht!!
    es existiert nur:
    CListBox::GetCurSel

    also bei funtioniert dein code (natürlich nur bei einer ListBox) einwandfrei, obwohl ich nicht verstehe, wieso du überhaupt nach GetCurSel wieder SetCurSel aufrufst?!

    Striker


Anmelden zum Antworten