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?
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?
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.
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;
un menu contextuel était ce dont j'avais besoin, donc le lien Fabian mentionné a fait l'affaire – second
Je pense que la valeur Nonclickable est définie sur la propriété HeaderStyle. – adatapost
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