2009-08-24 6 views
2

ListView.ColumnClick ne semble pas tirer pour les clics dans la zone d'en-tête qui est en dehors des colonnes (zone à droite de la dernière colonne, s'il y a)listview ColumnClick colonnes en dehors

est-il un facile façon de détecter les clics ici?

+1

Je pense que la valeur Nonclickable est définie sur la propriété HeaderStyle. – adatapost

+0

non, la valeur par défaut est cliquable. encore une fois, cela semble affecter seulement les en-têtes de colonne réels, pas la zone grise «restante» sur la droite. – second

Répondre

2

L'en-tête listview est une entité/fenêtre séparée dans le contrôle listview. Malheureusement listview ne fournit aucun événement de souris avec lequel vous pouvez capturer n'importe quelle activité sur l'en-tête (excepté les événements évidents). Vous allez devoir créer une version étendue du contrôle listview et utiliser des méthodes non gérées de niveau inférieur pour accéder à cette fenêtre et rendre ces événements disponibles.

Vous pouvez commencer ici: http://www.codeproject.com/KB/list/HeaderRightClick.aspx.

1

Même à un niveau inférieur, ce n'est pas si facile à faire. L'article donné repose sur l'événement MenuOpening, qui est pas envoyé lorsque l'utilisateur a cliqué sur l'en-tête. En fait, ListView ne reçoit aucune notification lorsque l'en-tête est cliqué (à gauche) en dehors des colonnes. (Un wrapper open source autour de .NET WinForms ListView) a tous les tuyaux dont vous avez besoin déjà en place et peut être facilement modifié pour ce faire.

Dans le fichier HeaderControl.cs, recherchez la méthode WndProc() et ajouter à la déclaration de cas qui est là:

case 0x0201: //WM_LBUTTONDOWN 
    if (this.ColumnIndexUnderCursor == -1) { 
     System.Diagnostics.Debug.WriteLine("header click on no column"); 
    }; 
    break; 
+0

un menu contextuel était ce dont j'avais besoin, donc le lien Fabian mentionné a fait l'affaire – second

Questions connexes