contextMenuStrip position ??? - C#/.NET managed - Programmation
Marsh Posté le 15-01-2008 à 10:12:48
clic gauche & 'MouseButtons.Right'
Sinon, concernant ton pb de coordonnées, il existe des méthode PointToScreen et PointToclient pour les contrôles qui permettent de retourner les coordonnées relative à l'écran ou à la fenêtre de ton application.
http://msdn2.microsoft.com/en-us/l [...] creen.aspx
Marsh Posté le 15-01-2008 à 10:42:55
Just my 2 cents...
Code :
|
Ca résoudrait pas ton problème par hasard ?
A mettre juste sur le conteneur du plus haut niveau (habituellement ton objet Form) qui doit gérer le menu contextuel.
Il sera hérité à tous les enfants du conteneur, sauf si ceux-ci font un appel explicite à un menu contextuel spécifique.
Ca me semble un peu plus simple que de devoir gérer à la main les évènements non ?
Marsh Posté le 15-01-2008 à 13:28:48
utilise cela:
this.contextMenuStrip1.Show(System.Windows.Forms.Control.MousePosition);
Marsh Posté le 15-01-2008 à 14:50:56
et pourquoi pas ma méthode plutôt ?
qui est juste la méthode standard, et ne nécessite même pas l'écriture de la moindre ligne de code, puisqu'elle peut se faire via la GUI
Marsh Posté le 15-01-2008 à 20:20:46
j'ai trouve plus simple sur un forum
Code :
|
merci qd meme tlm
Marsh Posté le 15-01-2008 à 21:18:24
bon, et maintenant que vous avez énuméré toutes les solutions pourries de la terre, est-ce que quelqu'un peu me dire pourquoi la solution que j'ai donné ne serait pas la bonne ?
franchement c'est quoi cette idée de vouloir réécrire ce qui existe déjà en natif ?
Marsh Posté le 16-01-2008 à 12:40:01
tu n'as aucun controle spécifique possible en passant par la méthode standards c'est tout
moi personnellement, dans une de mes applics, je voulais qu'elle ne s'affiche que si je faisais un click droit sur une ligne de ma grille.
mais sinon si c'est pas faire un truc standards, ta méthode est de loin la meilleure.
Marsh Posté le 16-01-2008 à 12:50:17
d'accord, en effet, pour du spécifique, on a besoin de modifier le fonctionne.
ceci dit, je reviens après un petit test
Marsh Posté le 16-01-2008 à 12:55:42
ok, très con c#, les mouseevents ne sont pas annulables...
du coup pas moyen de bloquer l'apparition du contextmenu via un test au moment du click...
Marsh Posté le 16-01-2008 à 16:40:35
il te reste cependant la possibilité de ne propager l'event plus bas on interceptant le click
Marsh Posté le 16-01-2008 à 16:47:34
moi23372 a écrit : il te reste cependant la possibilité de ne propager l'event plus bas on interceptant le click |
Ben oui, mais justement, je peux l'intercepter, mais je vois pas comment je peux le bloquer ensuite ()
En tout cas, si c'est faisable, je trouve ça mieux d'utiliser la méthode "de base", et au cas par cas, parceque je dois pas montrer une ligne sur deux par exemple, bloquer son appel, mais là je vois pas comment faire (faut dire que j'ai pas trop chercher non plus )
Marsh Posté le 16-01-2008 à 19:41:32
suffit de dériver du controle.
d'overrider la méthode "WndProc" dans laquelle passe tous les Events.
Dans celle ci, mettre une condition pour tester l'event qui arrive.
Si c'est le click, faire le traitement souhaité.
Pour annuler le click, ne pas faire un "base.WndProc(...)".
dans les autres cas, appeler "base.WndProc(...)".
Et le tour est joué.
Marsh Posté le 16-01-2008 à 20:29:44
effectivement
c'est un peu lourd, mais ça marche avec cette technique
Marsh Posté le 17-01-2008 à 12:56:33
c'est de cette façon qu'on peut rajouter des event sur les controles:
TabControl --> SelectedIndexChanging
Grille --> BeforeRowDeactivate
etc..
Marsh Posté le 14-01-2008 à 20:19:32
Bonjour,
J'amerai faire apparaitre un menu contextuel sous le pointeur avec un clique gauche.
avec ce code ce la ne marche pas car apparament les coordonée 'e.x' et 'e.y' sont par rapport à l'objet ou l'on clique.
Est on obligé de rajouter les coordonnée de tout les conteneurs, j'ai un datagridView, un groupbox, des onglets plus le menu de la fenetre mère , cela fait bcp de chose n'y a t'il pas un moyen plus simple