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 :

[C# 2.0]Changer le curseur au survol d'une cellule d'un DataGridView


Sujet :

Windows Forms

  1. #1
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut [C# 2.0]Changer le curseur au survol d'une cellule d'un DataGridView
    Comme le dit le titre :

    J'ai un DataGridView avec une unbound colonne qui peut contenir une image.
    Je voudrais que quand la souris passe par dessus cette image, le curseur se change en main, et quand le curseur sorvol le reste du datagridview, il redevienne normal.

    Comment je peux faire ça ?

  2. #2
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Pas d'idées ??

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Utiliser les évènements MouseEnter et MouseLeave, et redéfinir ton image en conséquence (changer la valeur de la cellule par exemple s'il s'agit d'une ImageColumn).

  4. #4
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    J'ai essayé mouseEnter, mais le curseur devient une main juste une fraction de seconde, puis il redevient normal.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Certainement parce que tu ne modifies pas le contenu de la cellule, et donc elle revient à son état initial. Avec ton code ce serait plus facile.

  6. #6
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    voici mon code :

    Evenement CellMouseEnter de ma grid :

    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
    		void gvOperations_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
    		{
     
    			if (e.ColumnIndex == ((DataGridView)sender).Columns["HasVentilations"].Index)
    			{
    				if (gvOperations.Rows.Count > 0 && e.RowIndex < gvOperations.Rows.Count)
    				{
    					DataGridViewImageCell cell = gvOperations[e.ColumnIndex, e.RowIndex] as DataGridViewImageCell;
     
    					//cell.
     
    					if (cell.Value != null)
    					{
    						Cursor.Current = System.Windows.Forms.Cursors.Hand;
    					} else
    						Cursor.Current = System.Windows.Forms.Cursors.Default;
     
    				}
    			}
    		}

    Code de création du contenu de ma celulle (c'est une cellule unbound)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	void colVentilations_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
    		{
    			if (e.ColumnIndex == ((DataGridView)sender).Columns["HasVentilations"].Index)
    			{
    				if (gvOperations.Rows.Count > 0 && e.RowIndex < gvOperations.Rows.Count)
    				{
    					Operation oper = gvOperations.Rows[e.RowIndex].DataBoundItem as Operation;
     
    					if (oper.Ventilations.Count > 0)
    						e.Value = Properties.Resources.TreeView_XP_Explorer_Expand;
    				}
    			}
    		}

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Oups, désolé, j'avais mal lu l'intitulé de ta question, alors pour le curseur de la souris dans un DataGridView, il faut utiliser la fonction Cursor tout simplement.
    (Mais je ne comprends pas l'obstination de ce composant à tout vouloir
    controler :-)

    Donc dans ton CellMouseEnter ->
    DataGridView.Cursor = Cursors.Hand;

    et dans ton CellMouseLeave ->
    DataGridView.Cursor = Cursors.Default;

    Normalement ca doit marcher.

  8. #8
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Ca fonctionne pas si je teste la colonne sur laquelle la souris se trouve :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void gvOperations_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
    {
    	if (e.ColumnIndex == ((DataGridView)sender).Columns["HasVentilations"].Index)
    	{
    		Cursor.Current = System.Windows.Forms.Cursors.Hand;
    	}
    }

  9. #9
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Points : 175
    Points
    175
    Par défaut as-tu trouvé la solution ?
    Bonjour,

    j'ai le même besoin, as-tu trouvé la solution ?

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Le control ou la donnée associé à l'image située dans la cellule (x,y) se retrouve dans MyDataGridView.Rows[y].Cells[x]. Et, si il s'agit d'une picturebox (?), on pourra associer à ce control (la PictureBox) les events MouseEnter et mouseLeave.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  11. #11
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Points : 175
    Points
    175
    Par défaut
    ...mais dans mon cas c'est du texte, donc pas de contrôle...

    je dois donc trouver pourquoi lorsque je change le curseur lors du MouseEnter il est aussitôt remis à son état d'origine par autre chose (à trouver).

    merci quand même.

  12. #12
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Pour que çà marche, il faut utiliser la propriété curseur du DGV et non celle de l'appli.
    Donc pour faire simple:


    dans ton event cell mouse enter, il faut coder:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGridView1.Cursor = Cursors.Hand;
    et en toute logique dans le cell leave:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGridView1.Cursor = Cursors.Default;

    Maintenant, je ne sais pas si cela répond complètement à ta question...

  13. #13
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2002
    Messages : 264
    Points : 175
    Points
    175
    Par défaut
    ben oui, evidemment...

    c'est tout c.. mais j'avais pas compris qu'il y avait un curseur par contrôle...
    ça m'explique pas mal de choses.

    merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aspect du curseur au survol d'une image
    Par frog43 dans le forum Flash
    Réponses: 10
    Dernier message: 30/04/2008, 17h27
  2. changer le curseur le temps qu'une page s'affiche
    Par aktos dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/07/2007, 11h50
  3. Réponses: 6
    Dernier message: 07/11/2006, 09h23
  4. [debutant] Changer le curseur au survol d'une zone reactive
    Par cosmos.1097 dans le forum Général Java
    Réponses: 3
    Dernier message: 30/06/2005, 16h19

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