[C#.NET2.0] Menu contextuel dans une cellule d'un datagridview

Menu contextuel dans une cellule d'un datagridview [C#.NET2.0] - C#/.NET managed - Programmation

Marsh Posté le 23-08-2006 à 12:16:51    


Bonjour,
 
J'ai un datagridview avec des fichiers listés dedans, dans la 1ere colonne. J'aimerais ajouter un menu contextuel, mais qui serait spécifique a une cellule, et non au datagridview entier (de sorte à editer une valeur concernant seulement le fichier choisi dans la liste).
 
Qqun a une idée ?
 
Merci d'avance :jap:

Reply

Marsh Posté le 23-08-2006 à 12:16:51   

Reply

Marsh Posté le 23-08-2006 à 14:07:16    

Je pense qu'on peut faire beaucoup mieux, mais ceci fonctionne :
 

Code :
  1. private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
  2.         {
  3.             if (e.Button == MouseButtons.Right && e.ColumnIndex != -1 && e.RowIndex != -1)
  4.             {
  5.                 DataGridViewCell c = ((DataGridView)sender)[e.ColumnIndex, e.RowIndex];
  6.                 c.ContextMenuStrip = contextMenuStrip1;
  7.                 c.ContextMenuStrip.Items[0].Tag = c;
  8.                 c.ContextMenuStrip.Items[0].Text = (string)c.Value;
  9.                 c.ContextMenuStrip.Show(this.Location.X + this.ClientRectangle.Location.X + ((DataGridView)sender).Location.X + e.X, this.Location.Y + this.ClientRectangle.Location.Y + ((DataGridView)sender).Location.Y + e.Y);
  10.             }
  11.         }
  12.         private void totoToolStripMenuItem_Click(object sender, EventArgs e)
  13.         {
  14.             MessageBox.Show(((DataGridViewCell)((ToolStripMenuItem)sender).Tag).ColumnIndex.ToString() + ", " + ((DataGridViewCell)((ToolStripMenuItem)sender).Tag).RowIndex.ToString());
  15.         }


 
PS: ça marche pas trop, au bout d'un certain nombre de clicks ça déconne, je te laisse trouver pkoi, ça me gave :D

Reply

Marsh Posté le 23-08-2006 à 14:09:22    

Merci, je vais tenter ca :)
 :jap:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 23-08-2006 à 14:10:10    

ps: c'est bien gore hein ;) si tu trouves mieux, n'hésite pas à poster ici ;)

Reply

Marsh Posté le 23-08-2006 à 14:25:21    

Hmm je ne comprends pas trop la 2eme fonction ... quel est le "totoToolStripMenuItem" ? enfin quel rapport avec le context menu ?


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 23-08-2006 à 14:29:25    

parceque j'ai fait un contextstringmenuchais pas quoi (pas toruvé le context-menu tout court ;))
 
j'ai créé un item bidon dedans, et j'ai indiqué quoi faire qd on double-click.
=> et du coup, dans la première fonction, j'associe juste le context-menu à ma cellule, et je change le libellé de l'item en question.
 
c'est juste un exemple

Reply

Marsh Posté le 23-08-2006 à 14:40:33    

Hmm je n'ai pas trop compris, et je n'arrive pas à le faire marcher  [:ddr555]  
 
Si je résume:
 
Si on clic droit sur une cellule de mon datagrivdview, dans un intervalle autorisé, on crée une nouvelle céllule à l'endroit cliqué, on lui donne les valeurs de la cellule cliquée, et on l'affiche au dessus.  
 
Jusque la, j'ai bon ? :D
 
Puis ensuite, je vois pas le rapport entre la 1ere et la 2eme fonction !


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 23-08-2006 à 14:43:15    

nan, c tout faux :D
 
dans ton designer, tu rajoutes un handler sur l'évènement "cellclick" de ton grid.
 
ensuite, dans ce handler, tu :
1/ récupère la cellule cliquée (attention, "cellclick" peut se déclencher même si on clique pas sur une cell :pt1cable: d'où mes != -1 ;))
2/ la fou dans l'objet tag de ton contextmenu (ouais, c'est crade :D)
3/ tu affiches le contextmenu
 
ceci dit, je suis persuadé qu'il y a bien plus propre comme technique, mais c'est vrai que c'est pas intuitif...


Message édité par MagicBuzz le 23-08-2006 à 14:44:02
Reply

Marsh Posté le 23-08-2006 à 14:49:59    

Pfiouuu ca me balance une exception a la gueule, et ce, sans afficher le menu  [:ddr555]  
Moi aussi je suis sur qu'il y a plus simple :D
 
'vais continuer à tester ^^


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 23-08-2006 à 16:43:22    

Hm j'ai avancé un peu, j'ai ca pour l'instant:
 

Code :
  1. Private void myDataGridView_CellContentClick(object sender, DataGridViewMouseEventArgs e)
  2. {
  3.     if(e.Button == MouseButtons.Right)
  4.     {
  5.           MessageBox.show("Clic Droit !" );
  6.     }
  7. }


Et ca fonctionne ^^
Maintenant, j'aimerais virer la messagebox, et y mettre un menu contextuel à la place. Comment faire ? :sweat:  
 


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 23-08-2006 à 16:43:22   

Reply

Marsh Posté le 23-08-2006 à 16:48:02    

Arf, ouais, le coup du cellcontentclick, c'est plus mieux :)
J'étais resté bloqué par ma recherche infructueuse de "cellrightclick" :D
 
Ben maintenant, tu fais juste un show() sur ton contextmenu (c'est normalement un objet que tu as créé)

Reply

Marsh Posté le 23-08-2006 à 16:52:43    

Bah oui mais comment j'etablis le rapport avec la cellule selectionnée ? et encore faut-il qu'elle devienne selectionnée, ce qui se fait normalement avec un clic gauche, et pas droit ! :D


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 23-08-2006 à 16:54:46    

passe par la propriété Tag de ton objet contextmenu
 
ainsi quand tu cliqueras sur un item de ton contextmenu, en allant chercher son parent.tag tu trouveras les infos de la cellule cliquée

Reply

Marsh Posté le 23-08-2006 à 17:49:59    

J'ai une autre solution, je tente ça ce soir, jte tiens au courant :sol: :D


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 23-08-2006 à 17:57:46    

ok :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed