Das Listenfeld löscht den Focus nicht beim verlassen?!



  • Hi forum,
    ich hab eine Klasse CSortListCtrl die von der CListCtrl abgeleitet ist:

    class CSortListCtrl : public CListCtrl
    {
    ....
    

    wenn ich einen Eintrag ausgewählt habe(markiert), und dann doch irgendwo im Dialog klicke, verliert das Listenfeld nicht den Focus, also der Eintrag ist nicht mehr blau markiert aber immer noch ausgewählt

    m_cTaskListe.GetSelectionMark(); //liefert mir immer noch einen wert grösser -1 !!!
    

    Was zu Problem führt das der vorher gewählter index trotzdem gelöscht werden kann, was fatale Folgen haben kann! 😮
    MEIN PROBLEM:
    Wie kann ich den zuvor gewählten Eintrag(Index) wieder zurücksetzten damit
    GetSelectionMark() wieder einen Wert kleiner 0 zurückliefert, sonst kann der Eintrag aus dem Listenfeld durch zufälliges klicken gelöscht werden, der Benutzer merkt nichts weil nichts blau markiert ist, er denkt es ist nichts ausgewählt, normaler Weise wenn nichts markiert ist und der Benutzer versucht etwas zu löschen wird er hingewiesen das er erst etwas auswählen soll, das sieht er dann das der Eintrag dann blau markiert ist! Sowas wie LostFocus oder ....
    huh, ich hoffe das mann mich verstehen kann was ich meine 😞 😕
    Danke
    Mirsad



  • ich kann jetzt nur vermuten was dein problem ist 😉

    du fragst deine liste mit GetSelectionMark() ab und willst das sie dir als ergebnis -1 liefert wenn kein item ausgewählt ist.

    falls das so ist dann frag vor GetSelectionMark() die anzahl an markierten items ab mit GetSelectedCount(). wenn dir diese funktionen einen wert größer 0 liefert, dann ist auch wirklich was markiert. dann benutzt du wie gehabt GetSelectionMark().



  • Wie löschst du denn Einträge? Per Taste (Entf) oder per Knopf im Dialog?

    Wenn das per Knopf geht ist das schon gut so, dass es die Selektion nicht verliert, weil du sonst nicht löschen könntest. Mit dem Klicken auf den Knopf verliert die Liste ja den Focus. 😃

    Wenn du per Taste löschst, behandel doch einfach die WM_KILLFOCUS Nachricht und setz das zurück. 🙂



  • Hi,
    danke erst mal für die Antworten, na eigentlich beide 😕 ,
    @estartu_de ich lösche die items per knopfdruck(button halt), was ich meine ist bevor ich lösche(klicke) frage ich ab ob etwas ausgewählt ist, wenn ja dann löschen wenn nicht gebe ich meldung das nichts markiert ist, ok, das funktioniert.
    Es kann ja sein das, nach dem etwas ausgewählt wurde, ich doch nichts löschen möchte, ich klicke z.B. irgend wo auf dem Dialogfeld, die Markierung ist zwar weg, also UnSelect so zu sagen ;-), aber das programm merkt sich trotzdem was ich zuvor markiert habe, und ich kann löschen ob wohl nichts mehr markiert ist(blau), der benutzer würde jetzt löschen können ohne das zu wissen wenn er zufälig auf die schaltfläche 'Delete' drücken würde, nur wenn ein button, egal welcher, geklickt wurde dann gibt GetSelectionMark() wieder wert kleiner 0, ich muß ereichen das kein index mehr ausgewählt ist!!!

    lg
    mirsad



  • Also, du kannst die WM_KILLFOCUS behandeln. Da kriegst du nen Zeiger auf das Fenster, was jetzt den Focus bekommt.
    Wenn das Fenster was anderes als der Löschen Knopf ist, kannst du ja die Selection aufheben. (Musste mal suchen, weiß ich grade nicht auswendig...)



  • oh mei, jetzt hast es auf den punkt gebracht 🙂 , die selection aufheben!! ok, das ist schon ein konkreter hinweis!
    danke! estartu_
    lg
    mirsad


Anmelden zum Antworten