[ListView] Doppelklick auf Eintrag bemerken



  • hmmm...ich überprüfe das mal kurz, dann sag ichs dir...

    Mfg Ominion

    EDIT: an und für sich schon richtig, aber ich wollte das abfangen, damit das item nur gewechselt wird, wenn ein Doppelklick darauf gemacht wird. Das ganze soll ein Serverprogramm werden und im ListView sollen eben die Clients stehen. Wenn man einen auswählt, dann soll man mit dem chatten können, und gucken welche Dateien er gerade sendet bzw empfängt. Das soll man dann unterbrechen bzw, selbst abzweigen können.

    Mfg Ominion


  • Mod

    Hinweis: LVN_ITEMCHANGING wird bei jeder (jeder) Änderung eines Items versendet. Was sich geändert hat muss man in der Struktur ansehen.



  • ja und das hatte ich probiert (oben im code). hat aber nicht funktioniert. Mit dem Code wollte ich prüfen, das wenn ein dabei ist sich zu ändern, und das über einen Doppelklick geschieht, es sich ändern kann, ansonsten will ich das irgendwie unterdrücken.

    Mfg Ominion


  • Mod

    Was ändert sich bei einem Doppelklick?
    In LVN_ITEMCHANGEING kannnst Du nicht feststellen was die Ursache der Änderung ist.

    Besser Doppelklick entsprechend behandeln bzwe. ignorieren.



  • Der Focus ändert sich. Der soll sich eben nur ändern, wenn ein Item doppelt angeklickt wurde.

    Mfg Ominion


  • Mod

    Was ist das für ein unsinniges Verhalten?

    BTW: Solche Abweichungen in der UI empfinde ich immer als äußerst lästig für einen Nutzer.

    BTW2: Die Doppelklick Nachricht ist nur eine ZUsatznachricht die immer die normale Aktion des einfachen Klicks einbezieht. D.h. Es gibt ekien Doppelklick Nachricht ohne eine vorherige normale Klick Nachricht...
    Deshalb wird die Selektionsänderung im einfachne Klick vollzogen.

    Ansonsten musst Du es eben alles per Hand machen. LButtonDown ignorieren und alles in DoubleClick selber machen. Aber was denkt denn ein User der klickt uns es passiert nichts... 👎



  • Da passiert schon etws, aber eben nur beim Doppelklick...soll zumindest...ich finde das auch gar nicht schwachsinnig, das erspart dem user beim ausversehen-reinklicken die ladezeit der infos, die er ja gar nicht haben will, und wenn doch, ein Doppelklick sollte genügen...

    Mfg Ominion


  • Mod

    Dann würde ich ein Delay einbauen zwischen dem Ändern der Selektion und dem Laden. Dann kann der User Hinklicken und sich Verklicken. Nach 500ms schließlich wird die Selelktion aktiv...

    Weitaus konformer!



  • Ok, das werde ich mal probieren, danke!

    Mfg Ominion



  • Das gehört zwar nicht zu dieser Frage, aber ich wollte nicht schon wieder ein neues Thema eröffnen:
    Ich habe jetzt wie folgt einen Click ausgewertet:

    case NM_CLICK:
        #define nml     ((NM_LISTVIEW FAR *) lParam)
        LV_ITEM lvi;
    
        char lpItemContent[MAX_PATH];
    
        lvi.mask = LVIF_TEXT | LVIF_PARAM;
        lvi.iItem = ListView_GetSelectionMark (hClientListView);
        lvi.iSubItem = 0;
        lvi.pszText = lpItemContent;
        lvi.cchTextMax = MAX_PATH;
    
        ListView_GetItem (hClientListView, &lvi);
    
        SetWindowText (hClientGroupBox, lpItemContent);
        #undef nml
    break;
    

    funktioniert an sich wunderbar, der markierte Eintrag wird auch in hClientGroupBox geschrieben bloß nicht immer! Wenn ich z.B schnell draufklicke, und schnell das ListView verlasse (EDIT: oder beim klicken einfach nur die Maus bewege), ändert sich nichts am Text. Gibt es eine mehr oder weniger todsichere Methode, wie sich der Text unabhängig von irgendwas (außer dem Klick) ändert?

    Mfg Ominion


  • Mod

    Es besteht ja auch die Möglichkeit, dass nichts selektiert ist. Das behandelst Du nicht...

    Desweiteren verwende ich ungern NM_CLICK.

    Alleine dieser Zusatz der Doku verleidet esmir:
    The iItem member of lpnmitem will only be valid if the icon or first-column label has been clicked. To determine which item is selected when a click takes place elsewhere in a row, send an LVM_SUBITEMHITTEST message.



  • da gibt es gar kein problem, mein listview hat nur eine spalte! und mit den nichts selektiert habe ich beachtet, es ändert aber nichts.

    Mfg Ominion

    EDIT: ich werde das übermorgen mal testen (habe das projekt auf arbeit vergessen)


Anmelden zum Antworten