Listenelement Problem



  • Hallo,

    ich hab mich mal wieder festgebissen. Und bestimmt ist die Lösung wieder ganz einfach :D.

    Also folgendes;

    void CTestDlg::Liste_Aktual()
    {
        int scrollpos = m_list.GetScrollPos(SB_VERT);
    
        m_list.DeleteAllItems();
        Liste_Fuellen();
    
        m_list.SetScrollPos(SB_VERT, scrollpos);
    }
    

    Mein Problem, die Liste wird gefüllt. Aber die ScrollPosition wird nicht gesetzt. Der Scrollbalken steht ganz normal oben. Lasse ich das DeleteAllItems() weg, schreibt er die Einträge dazu, setzt die Postion aber richtig.

    Wie kann ich das Problem umgehen. Auf DeleteItems(), woran sich SetScrollPos() wohl stört, kann ich nicht verzichten.

    Jemand eine Idee?

    Danke! Danke! Danke!



  • Ich nehme mal an, dass du nach dem Refresh wieder an die Stelle scrollen willst, die vorher sichtbar war.

    Ermittle doch das erste sichtbare Element in der Liste und sorge nach dem Update dafür dass es wieder sichtbar ist:

    int visible = m_list.GetTopIndex();
    
    m_list.DeleteAllItems();
    Liste_Fuellen();
    
    if ( visible>0 && visible<m_list.GetItemCount() )
       m_list.EnsureVisible( visible, FALSE );
    


  • tvdog: Ich nehme mal an, dass du nach dem Refresh wieder an die Stelle scrollen willst, die vorher sichtbar war.

    Genau das möchte ich. Mit deinem Code geht es allerdings auch nicht.
    Wird ohne Probleme kompiliert. Die Liste wird wie gewollt gefüllt.
    Aber nicht an die vorherige Postion gescrollt.

    Noch ne Idee???

    Danke!


  • Mod

    Ist ja auch klar, wenn Du oberhalb des Top-Index Zeilen löscht müsstest Du diesen Wert den Du ermittelt hast ja auch korrigieren.


Anmelden zum Antworten