Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GESTION DOUBLE CLIC SUR LISTVIEW (SUBCLASSING)


Information sur la source

Catégorie :Divers Source .NET ( DotNet ) Classé sous : LISTVIEW, DOUBLECLICK, CHECKBOX, ITEM Niveau : Débutant Date de création : 13/07/2008 Vu / téléchargé: 4 470 / 354

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
J'ai, il y a quelques jours, rencontré un problème avec une ListView avec la propriété CheckBoxes activée.

Lorsque l'on effectue un double clic sur un item, cela a pour conséquence de modifier l'état de la CheckBox de ce même item. La 2ème conséquence qui en découle est que les évenements ItemCheck et ItemChecked sont également appelés.

Il n'est par ailleurs pas possible de savoir si les évenements ItemCheck ou ItemChecked ont été appelés à la suite d'un double clic car l'évenement DoubleClick ne se produit qu'après les 2 premiers.

Cela devient vite un problème lorsque :
   - on souhaite gérer les 2 évenements (DoubleClick et ItemCheck) indépendamment
   - on ne souhaite pas que le double clic change l'état de la CheckBox

Après de longues recherches et un post sur le forum CS, je n'ai trouvé aucune réponse satisfaisante. Je me suis donc tourné vers le SubClassing.

Vous trouverez donc ici un exemple illustrant comment isoler les 2 méthodes (ItemCheck et DoubleClick) grâce au SubClassing (en pure .Net)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de PCPT le 13/07/2008 14:02:07 administrateur CS 9/10

je suis étonné par cette manière d'intégrer le subclassing.
peut être plusieurs fois instancié et même avec f = new MEME_FORM

très propre!

9/10 -> à cause du fait qu'il aurait été encore plus adapté de faire une classe héritant de la LV pour centraliser les évènements qui te sont utiles (mais ce n'était pas forcément ton besoin de départ)

bravo ;)

signaler à un administrateur
Commentaire de bouv le 13/07/2008 14:14:00

Merci. Comme je le disais sur le forum. SubClasser en .net devient un jeu d'enfant.

Sinon, pour mon problème de départ j'ai en effet intégré le code à la class heritant de la LV dans ce control :
http://www.vbfrance.com/codes/XPLISTVIEW_47073.aspx

Je ferais peut-etre une MAJ avec une propriété permettant d'activer ou non le DoubleClick. Question de temps.

Mais pour le post ici présent, j'ai voulu faire au plus simple afin que tout le monde puisse bien comprendre ce qui se passe.

signaler à un administrateur
Commentaire de bouv le 13/07/2008 14:20:27

J'oubliai on ne s'en rend pas forcément compte mais la Form est également SubClasser ici.

Pour récupérer les messages de la Form il suffit d'ajouter :

Protected Overrides Sub WndProc(ByRef m As Message)

End Sub


Par ailleurs, fini les problèmes d'instabilité de l'IDE comme en VB6 (Même si Renfield avait fini par résoudre le problème)

signaler à un administrateur
Commentaire de PCPT le 13/07/2008 14:39:06 administrateur CS

... en effet je vois pas trop là
je comprends de quoi tu parles mais pas le "pourquoi" dans le fonctionnement

(j'sens que je ne vais pas me mettre à dotnet encore un moment ^^)

tu déclares withevents la class SubClass
tu l'instancies au LOAD avec le handle de la LV, puis active (enabled)

l'instance reçoit bien uniquement les events de la LV non?
puis elle raise TOUT de la LV uniquement

ta form reçoit "CE" TOUT, et tu n'annules que le DBL_CLICK

je ne vois pas comment la form devrait recevoir ses propres évents en ajoutant ta protected sub

tu peux expliquer stp?

signaler à un administrateur
Commentaire de bouv le 13/07/2008 15:00:28

"j'sens que je ne vais pas me mettre à dotnet encore un moment"

LOL j'ai fait la même reflexion pendant très longtemps. DotNet est si, DotNet est ça.
En fait, il faut simplement se lancer, faire un premier pas et on se rend compte du temps que l'on peut gagner à programmer en .NET
Depuis que j'y ai gouter, je ne touche plus mon VB6 (juste pour relire d'anciens codes et les porter en .Net)

Sinon, pour répondre à ta question. Je reconnais ne pas avoir été très clair. Plus même je me suis carrement mal exprimé.

La class n'a en fait rien a voir dans le sous-classement de la fenêtre elle-même. Disons que toutes les fenêtres en VB.Net le sont automatiquement.
Et pour récupérer les messages il suffit d'ajouter : Protected Overrides Sub WndProc(ByRef m As Message)

signaler à un administrateur
Commentaire de PCPT le 13/07/2008 16:00:39 administrateur CS

beh le premier pas est fait, j'ai installé VS2008 c'est déjà pas mal non? ^^
on verra par la suite, rien ne presse

compris pour le subclass permanent et son appel. tout s'explique ;)
merci

bonne continuation

signaler à un administrateur
Commentaire de fifrelin70 le 11/10/2008 02:12:18 10/10

Excellent. Source très utile et explicite. merci

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

ListView : DoubleClick sur un item [ par cycledelique ] Bonjour, Je n'arrive pas a créer un évenement "DoubleClick" sur un Item de ma listview. En effet je voudrais pouvoir faire en sorte de doubleclicker listview + doubleclick [ par clasix ] bonsoir,j'ai un souci d'evenement....je ne trouve pas l'equivalent du double clique pour la selection d'une ligne (fullrawselect...)j'ai trouvé l Dernier Item séléctioné dans ListView [ par renocmoa ] Bonsoir,Comment fait on pour connaitre l'index du dernier élément séléctioné dans une listview celui qui à le petit cadr Inserer item d'une ListView dans un Group [ par spyderco ] Bonjour,J'aimerais inserer un item d'une ListView dan un Groupe.Mais je n'y arrive pas.J'ai assayé avec ca mais sans succé :  ListView.Items(j).Group listview et checkbox [ par nesaipas ] bonjour voila ma question comment amener la ligne en surbrillance au niveau du checkbox sélectionné et avoir par la même occassion ListView en Mode Virtuel et ImageKey d'un ImageList [ par archimed111 ] Bonjour J'ai un petit probléme je n'arrive pas a faire fonctionner quelque chose qui pourtant le devrait. J'ai fait une application de test juste pou Copier item listview vers excel [ par sheffy222 ] BonjourJe travail en vba et j'ai un petit problème.J'aimerais savoir comment faire pour transférer toutes les valeurs que j'ai dans une list listview+checkbox [ par FASH ] Bonjour,En VB6, avec une listview qui contient des checkboxes ,je désire savoir comment faire pour retrouver l'index de la ligne qui est checked. Image dans listview [ par milo2009 ] Salut, J'utilise, dans mon appli vb.net 2003, une ImageList contenant mes icone pour ma listview. Tout fonctionne cependant, je voudrais mettre dans


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.