Probleme mit CTreeCtrl::DeleteAllItems



  • Hallo,

    mit dem CTreeCtrl hab ich folgendes Problem:
    In einer Anwendung hab ich einen Button mit dem etwas in den Tree geschrieben wird

    HTREEITEM hti;
    hti = m_ctlTree.InsertItem("Eintrag 1");
    m_ctlTree.InsertItem("Eintrag 1_1", hti);
    m_ctlTree.InsertItem("Eintrag 1_2", hti);
    m_ctlTree.InsertItem("Eintrag 2");
    m_ctlTree.InsertItem("Eintrag 3");
    

    mit einem anderen Button wird alles gelöscht.

    m_ctlTree.DeleteAllItems();
    

    Im Prinzip funktioniert das auch, nur wenn ich nach dem Löschen nochmal wieder den Button zum Einfügen drücke tut sich gar nichts, es wird kein einziger Eintrag eingefügt.
    Kann mir jemand erklären woran das liegt?

    Gruss,
    Michel



  • steht nichts in der variable oder siehst du nichts auf der oberfläche???



  • Ich sehe überhaupt nichts an der Oberfläche und InsertItem() gibt auch keinen Fehler raus, zumindest ist der Rückgabewert nicht NULL.
    Bevor man DeleteAllItems() aufruft funktioniert das Hinzufügen auch bestens. 😕



  • also bist du dir sicher das du die strings in den items drin hast beim zweiten aufruf???

    dann solltest warscheinlich nur ein refresh für die ansicht aufrufen



  • Ja, ich klicke ja zweimal auf genau den gleichen Button, die String müssen also ankommen.
    Ich habs jetzt schon versucht mit RedrawWindow() und UpdateWindow() (sowohl für das Dialogfenster als auch für den TreeCtrl), aber das hilft auch nix.



  • was heißt müssen ankommen?

    ist es so oder ist es nicht so?

    debugg doch erstmal rein. ob er die daten richtig rein schreibt



  • hmmm

    ermittle am anfang die lenage

    ermittle dann mal nach dem einfuegen die leange

    jetzt loesche alle ( wie gehabt )

    und ermittle jetzt mal die laenge

    maybe liegts an dem, hmm

    musst du nicht nach dem loeschen ( vom allem ) wieder root bestimmen und kannst dann einfuegen?



  • weiß nicht was du mir sagen willst. so hilfst du mir nicht weiter das ich dir helfen kann

    sind die daten drin ? ja nein? das frag ich jetzt schon zum dritten mal 🙂

    nach dem du alles gelöscht hast ist dann wenn du die einträge abfragst keiner mehr drin? ja nein?

    dann solltest natürlich wieder bei 0 anfangen items zu füllen



  • Hab ich gerade getestet...
    also die Funktion CTreeCtrl::InsertItem(...) erhält alle Daten (also die Strings) einwandfrei und beim Debuggen tritt auch kein Fehler auf.
    Nur auf dem Bildschirm ist wieder mal nix zu sehen. 😕



  • ich meine natrülich ob du wirklch in der variable geguckt hast.

    oder ob laute NULL pointer drin stehen???

    was ich dir auf alle fälle anraten würde nicht insertitem zu nehmen
    da du da nur in die tree view rein schreibst.

    ich würde dir empfehlen direkt zu schreiben mit SetItem
    so hast du auch nicht das problem mit dem update der ansicht 🙂



  • hmm

    wenn du ganz sicher gehen willst

    dann nimm ein element ( oder das oberste )
    und gib mal in messagebox aus

    wenn es geht, dann liegts irgendwie an der anzeige. wenn nicht drauf zugreifen kannst dann, hmmm schwer



  • Also im Debugger sieht m_ctlTree eigentlich vor und nach dem Aufruf von DeleteAllItems() so ziemlich gleich aus, es ist nicht so das hinterher viele Werte fehlen oder so.
    Hab aber festgestellt das ich mir die Einträge durchaus mit GetItemText() holen kann, obwohl nichts angezeigt wird.
    Das versteht wer will. Für SetItem schein ich noch etwas zu blöd zu sein. 😉 Muss ich mal ein bisschen mit rumtesten.


Anmelden zum Antworten