Bonjour à tous,

J'ai un petit bug qui me fait tourner en rond depuis longtemps.

J'utilise des DataGridView. Sur ceux-ci, j'utilise l'évènement CellMouseclick pour faire apparaitre un menu contextuel qui a besoin de savoir ce qui est sélectionné.

Jusque là, tout est OK.

Mais j'ai remarqué que lorsque je fais un clique-droit directement, je n'ai pas/plus l'effet habituelle qui annule et remplace la sélection précédente par la nouvelle. Les deux se retrouve ainsi sélectionné comme si j'avais appuyé sur la touche contrôle.

Ce phénomène n'est pas celui que je souhaites bien évidement, d'où mon intervention ici.

Voici un exemple d'implémentation du MouseClickEvent :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
private void dgv_membres_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            DataGridView d = (DataGridView)sender;
            ContextMenu c = DataGridViewTool.GenericContextMenu(d, e);
            if (e.Button != MouseButtons.Right && c == null) return;
            c.MenuItems["new"].Click += new EventHandler(AddRecord);
            c.MenuItems["refresh"].Click += new EventHandler(LoadData);
            c.MenuItems["edit"].Click += new EventHandler(Edit);
            c.MenuItems["delete"].Click += new EventHandler(DeleteRecord);
            c.MenuItems["print"].Click += new EventHandler(PrintView);
            c.MenuItems["duplicate"].Click += new EventHandler(Duplicate);
            c.MenuItems["copy"].Click += new EventHandler(Copy);
            c.MenuItems["count"].Click += new EventHandler(Count);
            c.MenuItems["export"].Click += new EventHandler(Export);
            c.MenuItems["search"].Click += new EventHandler(SearchIn);
 
            if (GetSelectedIds().Count() > 1)
            {
                c.MenuItems["edit"].Visible = false;
            }
 
            c.MenuItems.Add(new MenuItem("-"));
            MenuItem mArchived = new MenuItem("&Archiver / Désarchiver"); mArchived.Name = "reverseArchived"; ;
            mArchived.Click += new EventHandler(reverseArchived);
            c.MenuItems.Add(mArchived);
 
            if (GetSelectedIds().Count() == 1)
            {
                MenuItem mPret = new MenuItem("&Prêter du matériel"); mPret.Name = "pretDeMateriel"; ;
                mPret.Click += new EventHandler(preterMateriel);
                c.MenuItems.Add(mPret);
 
                c.MenuInscrireViaSaisonAndMembre(GetSelectedIds().First().Item2);
 
                MenuItem mCompet = new MenuItem("&Analytique Compétitilon"); mCompet.Name = "Acompetition"; ;
                mCompet.Click += new EventHandler(AnalysisCompet);
                c.MenuItems.Add(mCompet);
            }
 
            MenuItem c2 = new MenuItem("&Modification par lot");
            c.MenuItems.Add(c2);
 
            MenuItem mSingleBatchCp = new MenuItem("Code Postal"); mSingleBatchCp.Name = "codePostal"; ;
            mSingleBatchCp.Click += new EventHandler(SingleBatchCp);
            c2.MenuItems.Add(mSingleBatchCp);
 
            MenuItem mSingleBatchVille = new MenuItem("Ville"); mSingleBatchVille.Name = "ville"; ;
            mSingleBatchVille.Click += new EventHandler(SingleBatchVille);
            c2.MenuItems.Add(mSingleBatchVille);
 
            MenuItem mSingleBatchBlason = new MenuItem("Blason"); mSingleBatchBlason.Name = "blason"; ;
            mSingleBatchBlason.Click += new EventHandler(SingleBatchBlason);
            c2.MenuItems.Add(mSingleBatchBlason);
 
            c.Display(d, e);
        }
Voici ce qui se passe en image.

Avant de faire un clique droit : https://1drv.ms/u/s!AgEbdqIlhPuRkLFxOJry-MtQ_o1NCg

Après avoir fait un clique droit : https://1drv.ms/u/s!AgEbdqIlhPuRkLF0cJY5eTRqiCyzOw

Et je souhaiterais le comportement suivant (montage photo) : https://1drv.ms/u/s!AgEbdqIlhPuRkLF1TH-DUhaC2LRa2g

Bien cordialement à tous,

Quentin