none
DataGridView RRS feed

  • Question

  • Bonjour,

    J'utilise un DGV pour le traitement d'un magasin de données

    VirtualMode=TRUE
    EditMode=EditOnKeystroke
    SélectionMode=FullRowSelect

    Ce qui me permet d'avoir une ligne bleue qui se déplace avec les fléches
    vers ht/bas
    ainsi que de sélectionner plusieurs lignes grace à la souris

    Le seul problème est que lorsque je me déplace d'une colonne à la suivante
    il n'y a rien de visuel, je vais d'une case bleue a une case bleue que
    ce soit avec les flèches dt/ g ou un clic souris. (au 2ème clic par contre
    la cellule devient blanche avec le caret qui clignote)
    N'ayant pas trouvé de solution à ce problème, je m'y suis accoutumé.
    Or par hasard, je me suis aperçu que si je tapais une fois sur la touche
    TAB,
    ensuite un cadre pointillé apparaissait dans la cellule à chaque changement
    de colonne.
    Mais je n'ai pas pu automatiser (programmer) cela.

    Quelqu'un a t il une idée pour que le cadre pointillé apparaisse ds la
    cellule
    à chaque chgt de colonne

    Merci à tous
    mardi 4 mai 2010 07:55

Réponses

  • Bonjour,

     

    Vous pouvez utiliser SendKeys pour obtenir le même résultat qu’en tapant sur TAB. Ajoutez cette méthode pour l’évènement Enter du DataGridView :

     

      private void dataGridView1_Enter(object sender, EventArgs e)

            {

                SendKeys.Send("{TAB}");

            }

     

     

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    • Marqué comme réponse PRVB6 jeudi 6 mai 2010 16:15
    jeudi 6 mai 2010 09:40
  • Après qqs tatonnements j'ai trouvé LA solution qui marche toujours parfaitement:

    Private

    Sub DGV_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DGV.CellPainting

    If Me.DGV.CurrentCellAddress.X = e.ColumnIndex And Me.DGV.CurrentCellAddress.Y = e.RowIndex Then

    Dim newRect As New Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 1, e.CellBounds.Width - 4, e.CellBounds.Height - 4)

    Try

    e.Paint(e.ClipBounds, DataGridViewPaintParts.All)

    e.Graphics.DrawRectangle(Pens.White, newRect)

    e.Handled = True

    Catch ex As Exception

    stop

    End Try

    End If

    End Sub

    dimanche 28 novembre 2010 14:58

Toutes les réponses

  • Bonjour,

    A la base (à ma connaissance) il n'existe aucune option pour activer le cadre en pointillé avec les flêche gauche/droite.

    L'EditMode = EditOnEnter ne correspondrait pas à votre besoin ? Sinon, vous pouvez utiliser l'événement CellPainting pour dessiner vous même le rectangle de sélection.

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    mardi 4 mai 2010 20:03
    Modérateur
  • Bonjour,

     

    Vous pouvez utiliser SendKeys pour obtenir le même résultat qu’en tapant sur TAB. Ajoutez cette méthode pour l’évènement Enter du DataGridView :

     

      private void dataGridView1_Enter(object sender, EventArgs e)

            {

                SendKeys.Send("{TAB}");

            }

     

     

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    • Marqué comme réponse PRVB6 jeudi 6 mai 2010 16:15
    jeudi 6 mai 2010 09:40
  • merci beaucoup pour votre solution ... qui marche.

    Je suis un peu vexé car j'avais bien pensé à

    sendkeys mais... je ne savais pas ou le mettre

    Merci

    jeudi 6 mai 2010 17:50
  • Après qqs tatonnements j'ai trouvé LA solution qui marche toujours parfaitement:

    Private

    Sub DGV_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DGV.CellPainting

    If Me.DGV.CurrentCellAddress.X = e.ColumnIndex And Me.DGV.CurrentCellAddress.Y = e.RowIndex Then

    Dim newRect As New Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 1, e.CellBounds.Width - 4, e.CellBounds.Height - 4)

    Try

    e.Paint(e.ClipBounds, DataGridViewPaintParts.All)

    e.Graphics.DrawRectangle(Pens.White, newRect)

    e.Handled = True

    Catch ex As Exception

    stop

    End Try

    End If

    End Sub

    dimanche 28 novembre 2010 14:58