IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Forcer le focus d'une cellule d'un datagridview sur un clic droit


Sujet :

Windows Forms

  1. #1
    Membre confirmé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Points : 462
    Points
    462
    Par défaut Forcer le focus d'une cellule d'un datagridview sur un clic droit
    Bonjour,

    J'ai un datagridview avec une colonne contenant des images. Lors d'un clic droit sur l'image, un menu contextuel apparait avec la possibilité de modifier l'image.
    Ca marche si le focus est placé auparavant sur la cellule correspondante, mais pas autrement... Je voudrais que le fait de faire le click droit fasse le même effet que le clic gauche, en plus du menu contextuel, c'est-à-dire qu'il sélectionne la cellule sur laquelle on clic.
    Je sais qu'il faut utiliser DataGridView.CurrentCell = ...
    mais je n'arrive pas a récupérer la cellule sur laquelle le clic droit a été réalisé...

    Merci d'avance

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Pour afficher un menu contextuel sur la DataGridView, le mieux que j'aie trouvé est de s'abonner à l'event CellMouseClick, dans lequel on récupère un eventArgs qui contient le RowIndex et le ColIndex de la cellule cliquée. Après, reste juste à mettre à true la propriété Selected de la cellule en question, et afficher le menu contextuel à l'endroit courant (avec un MenuContextuel.Show(Cursor.Position)).

    C'est p't'êt pas l'optimum mais ça marche
    ಠ_ಠ

  3. #3
    Membre confirmé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Points : 462
    Points
    462
    Par défaut
    Merci de ta réponse Guulh.
    Ok, ca marche quand on clic gauche, a condition de rajouter un petit test sur le e.ColumnIndex car il n'y a qu'une colonne ou je désirais le menu...
    Mais j'aurais préféré une méthode qui utilise le clic droit...Pourquoi n'y a t-il pas une méthode CellMouseRightClick!!!!

    Quelqu'un d'autre a une idée??

  4. #4
    Membre confirmé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Points : 462
    Points
    462
    Par défaut
    J'ai essayé en renseignant que le bouton qui doit être cliqué est le droit, mais le focus ne vas toujours pas sur la cellule!! grdAlbums c'est le datagridview :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (e.ColumnIndex == 0)
                {
     
                    if (e.Button == MouseButtons.Right)
                    {
                        grdAlbums.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected = true;
                        contextMenuPochette.Show(Cursor.Position);
                    }
                }
    le menu s'affiche bien, et si je remplace right par left, cela marche...Sauf que j'aimerais mieux le clic droit...Je garde la solution du clic gauche en attente d'une meilleure solution...

  5. #5
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par ToutPaumé Voir le message
    le menu s'affiche bien, et si je remplace right par left, cela marche...Sauf que j'aimerais mieux le clic droit...Je garde la solution du clic gauche en attente d'une meilleure solution...
    Il faut en effet tester que le bouton appuyé est le droit, mais je vois pas ce qui marche pas chez toi. Tu récupères bien la cellule cliquée et tu mets son "Selected" à true, non ? T'as essayé de passer en pas à pas pour voir si ta cellule est bien la bonne et qu'elle est sélectionnée correctement ?
    ಠ_ಠ

  6. #6
    Membre confirmé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Points : 462
    Points
    462
    Par défaut
    Oui j'ai fait le pas à pas, les index des colonnes et des cellules sont les bonnes.
    Ca marche pour le clic gauche, mais pas le droit...tu as essayé chez toi avec le test du bouton droit?

    Merci de ton aide en tout cas!

  7. #7
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Je fais ça et ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void dgv_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
      DataGridView dgv = sender as DataGridView;
      if (e.Button == MouseButtons.Right && e.RowIndex >= 0)			// menu contextuel des lignes
      {
        dgv.Rows[e.RowIndex].Selected = true;
        menu1.Show(Cursor.Position);
      }
      else if (e.Button == MouseButtons.Right && e.RowIndex == -1)	// menu contextuel des headers
      {
        menu2.Show(Cursor.Position);
      }
    }
    La seule différence est que ma grille est en mode de sélection par ligne alors que tu à l'air de bosser par cellule, mais sinon je vois pas pourquoi ça marcherait pas chez toi
    ಠ_ಠ

  8. #8
    Membre confirmé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Points : 462
    Points
    462
    Par défaut
    En effet ça marche pour les lignes mais pas pour les cellules!!!
    Et puis cette méthode ajoute les sélections...Si tu fais un cliques sur une ligne, puis sur une autre les deux seront sélectionnées...Tu n'as pas ce problème?
    Enfin en tout cas, je me demane poruquoi ça ne marche pas pour les cellules...

  9. #9
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par ToutPaumé Voir le message
    En effet ça marche pour les lignes mais pas pour les cellules!!!
    Et puis cette méthode ajoute les sélections...
    Sauf si tu mets la propriété MultiSelect (je sais plus si elle s'appelle exactement comme ça mais bon) à false
    Citation Envoyé par ToutPaumé Voir le message
    Enfin en tout cas, je me demane poruquoi ça ne marche pas pour les cellules...
    Chépas non plus, je peux pas t'aider beaucoup plus.

    Courage
    ಠ_ಠ

  10. #10
    Membre confirmé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Points : 462
    Points
    462
    Par défaut
    Merci je vais garder le clic gauche en attendant que quelqu'un trouve une solution ou bien si je la trouve je reposterai ici!

    encore merci, à la prochaine!

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 141
    Points : 109
    Points
    109
    Par défaut
    Bonjour à tous et bonne année avec ce déterrage de post...

    Je fouinais pour l'histoire du clic droit et finalement un forum anglophone donnait une bonne réponse...

    Adapté en C# voici ce que cela donne sur l'évènement MouseDown et à priori cela gaze... Je cherchais à récupérer la valeur de la cellule sur un clic droit dans un datagridview nommé dgv

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void dgv_MouseDown(object sender, MouseEventArgs e)
            {          
                DataGridView.HitTestInfo hti = this.dgv.HitTest(e.X, e.Y);
                if (hti.Type == DataGridViewHitTestType.Cell && e.Button == System.Windows.Forms.MouseButtons.Right)
                {
                    this.dgv.ClearSelection();
     
                 MessageBox.Show(this.dgv.Rows[hti.RowIndex].Cells[hti.ColumnIndex].Value.ToString());
                }
            }
    En espérant que cela dépanne...

Discussions similaires

  1. Comment forcer le focus dans une cellule ?
    Par abd75web dans le forum VB.NET
    Réponses: 7
    Dernier message: 26/05/2013, 10h18
  2. focus dans une cellule d'une JTable
    Par coil dans le forum Composants
    Réponses: 5
    Dernier message: 07/07/2010, 17h15
  3. Réponses: 0
    Dernier message: 14/05/2010, 12h00
  4. Comment forcer le format d'une cellule?
    Par cha_cha dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/11/2005, 14h31
  5. excel -> test lors de la perte du focus d'une cellule
    Par greg778 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 26/09/2005, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo