GESTION DOUBLE CLIC SUR LISTVIEW (SUBCLASSING)

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 13 juil. 2008 à 14:02
kimwu Messages postés 40 Date d'inscription dimanche 23 novembre 2003 Statut Membre Dernière intervention 25 juin 2011 - 25 juin 2011 à 04:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47305-gestion-double-clic-sur-listview-subclassing

kimwu Messages postés 40 Date d'inscription dimanche 23 novembre 2003 Statut Membre Dernière intervention 25 juin 2011 1
25 juin 2011 à 04:36
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!
fifrelin70 Messages postés 31 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 16 mars 2009
11 oct. 2008 à 02:12
Excellent. Source très utile et explicite. merci
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
13 juil. 2008 à 16:00
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
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
13 juil. 2008 à 15:00
"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)
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
13 juil. 2008 à 14:39
... 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?
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
13 juil. 2008 à 14:20
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)
bouv Messages postés 1411 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 3 mars 2019 1
13 juil. 2008 à 14:14
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.
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
13 juil. 2008 à 14:02
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 ;)
Rejoignez-nous