begin process at 2012 02 12 15:19:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > GESTION DOUBLE CLIC SUR LISTVIEW (SUBCLASSING)

GESTION DOUBLE CLIC SUR LISTVIEW (SUBCLASSING)


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :7 037 / 539

Auteur : bouv

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (8)
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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source .NET (Dotnet) ADO.NET SANS DOULEUR
Source avec Zip Source avec une capture Source .NET (Dotnet) OCR (UTILISATION DE TESSNET2.DLL)
Source avec Zip Source avec une capture Source .NET (Dotnet) LISTVIEWEX
Source avec Zip Source avec une capture Source .NET (Dotnet) SPAM ANTI SPAM
Source avec Zip Source .NET (Dotnet) UTILISER ADO.NET COMME EN ADO (RECORDSET)

 Sources de la même categorie

Source avec Zip TEXTBOX EN NUMÉRIQUE par 320C
Source avec Zip DÉCIMAL TO HEXDECIMAL par loulou27200
SOUS-TITRES : INCRÉMENTATION DE TOUTES LES CHAÎNES DE CARACT... par ALMIRA
Source avec Zip Source avec une capture EVALUER UN NOMBRE D'OBJETS AVEC UNE BALANCE ET DEUX ÉCHANTIL... par lexsty
Source avec Zip Source avec une capture PETIT LOGICIEL DE DEVIS SANS BD par lololilizozo

 Sources en rapport avec celle ci

Source avec Zip FONCTIONS PRATIQUE POUR LISTVIEW par Galactus13
Source avec Zip PARAMETRES SETTINGS VBA par Le Pivert
Source .NET (Dotnet) LISTVIEW FONCTION MOVE UP, DOWN, TOP & BOTTOM EN MULTISELECT par Nicolas H.
Source avec Zip Source avec une capture Source .NET (Dotnet) SAUVEGARDER_DERNIÈRES_MODIFICATIONS par Le Pivert
DRAG AND DROP AVEC 2 LISTVIEW par Cousin Hub

Commentaires et avis

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 ;)

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.

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)

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?

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)

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

Commentaire de fifrelin70 le 11/10/2008 02:12:18 10/10

Excellent. Source très utile et explicite. merci

Commentaire de kimwu le 25/06/2011 04:36:54


Salut!
Intéressant. Grâce à ta source j'ai pu subclasser un column header d'une listview, afin de pouvoir attraper les mousemove ! (impossible normallement à partir de la listview, dès qu'on arrive sur le header les WM_MOUSEMOVE ne se lancent pas)

-----------------

Cependant, je ne comprend pas un de tes points. Peut-être le même que PCPT (?) :

    'Renvoi les messages de sous-classement  (si on le souhaite)
    Protected Overrides Sub WndProc(ByRef m As Message)
        If mSubClass Then 'If Subclassing Enabled then RaiseEvent
            RaiseEvent CallBackProc(m)
        End If
        MyBase.WndProc(m)                      <<<<<<<  ICI  (?)
    End Sub

Pourquoi faire passer en dernier TOUS les messages, même quand tu les a déjà redirigés ? J'aurais plutôt vu un

    'Renvoi les messages de sous-classement  (si on le souhaite)
    Protected Overrides Sub WndProc(ByRef m As Message)
        If mSubClass Then 'If Subclassing Enabled then RaiseEvent
            RaiseEvent CallBackProc(m)
        else
            MyBase.WndProc(m)                      <<<<<<<  LA !!
        End If
    End Sub


Car avec ton code, cela fait donc DOUBLE EMPLOI avec la même commande dans :
    Private Sub CallBackProc(ByRef m As System.Windows.Forms.Message)

Je veux dire que tu lance MyBase.WndProc(m) 2x dans le cas ou il était subclassé...

Tiens-moi au courant STP, je ne comprends pas ^^
Merci d'avance!

 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&#233; l Dernier Item séléctioné dans ListView [ par renocmoa ] Bonsoir,Comment fait on pour connaitre l'index du dernier &#233;l&#233;ment s&#233;l&#233;ction&#233; dans une listview celui qui &#224; 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&#233;lectionn&#233;&nbsp;et avoir par la m&#234;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&#232;me.J'aimerais savoir comment faire pour transf&#233;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&#233;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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales