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

VB.NET Discussion :

[vb.net] double click dans une datagrid


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2002
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 72
    Points : 63
    Points
    63
    Par défaut [vb.net] double click dans une datagrid
    Voila j'aimerai faire une action spécial quand je click sur une colonne précise dans ma datagrid, l'événement datagrid1.DoubleClick n'est lancer que si je clique sur l'entête de ligne.
    Dans ma datagrid j'ai une arraylist d'objet, et ma datagrid est mise en forme avec une datagridtablestyle.
    l'événement doit se produire au niveau du System.Windows.Forms.DataGridTextBoxColumn, mais je n'arrive pas a trouver quelle événement est déclenché ?

    merci.

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Bon je vais prendre le temps de te décrire la démarche
    1. Tu dois impérativement recupérer l'évènement sur le DataGrid, seul Control disponible pour ton besoin
    2. L'evenement à utiliser en priorité est MouseDown
    Soit pour commencer
    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
     
    Imports System
    Imports System.Windows.Forms
    '...
       Private IsDoubleClick As Boolean
     
       Private Sub DataGrid1_DoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles DataGrid1.DoubleClick
           Me.IsDoubleClick = True
       End Sub
     
       Private Sub DataGrid1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGrid1.MouseDown
           If Me.IsDoubleClick Then
              //ici le code qui va reperer l'endroit du click ...et
              Me.IsDoubleClick = False
           End If
       End Sub
    3. Comment maintenant reperer l'endroit dans le Datagrid qui a été clické, nous avons pour cela à notre disposition la classe DataGrid.HiTestInfo et la propriété DataGrid.HitTest avec l'aide de l'énumération DataGrid.HitTestType
    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
     
       Private Sub DataGrid1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGrid1.MouseDown
           If Me.IsDoubleClick Then
              Dim hi As DataGrid.HitTestInfo
              hi = CType(sender,DataGrid).HitTest(e.X, e.Y)
              If hi.Type = DataGrid.HitTestType.ColumnHeader Then
                'il est aussi possible de distinguer en fonction du n° de colonne
                Select Case hi.Column
                    Case 0 : '...etc..
                    Case Else : '...etc
                End Select
              End
              Me.IsDoubleClick = False
           End If
       End Sub
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2002
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 72
    Points : 63
    Points
    63
    Par défaut
    Private Sub DataGrid1_DoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles DataGrid1.DoubleClick
    Me.IsDoubleClick = True
    End Sub
    tout mon probleme est justement la. si je suis dans une case de mon datagrid l'evenement DoubleClick ne sera jamais catcher par DataGrid1.DoubleClick !
    je ne passe donc j'amais dans ce bout de code.

    l'evenement va etre catcher par le textbox qui est dans la datagrid, et ça j'arrive pas à le choper.

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    ok je n'avais pas correctement compris et n'avait pas vu que tu souhaitais egalement capturer dans une cellule de la colonne
    Bon ne t'en fais pas la démarche reste dans la même idée
    mais cette fois on laisse tomber le DoubleClick et on garde le MouseDown un peu modifié
    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
     
    'repere temporel du click
    Private ClickTime As DateTime
    'initialiser dans le constructeur
    Public Sub New()
      MyBase.New()
      InitializeComponent()
      Me.ClickTime = DateTime.Now
    End Sub
    Private Sub DataGrid1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGrid1.MouseDown 
      If DateTime.Now < Me.ClickTime.AddMilliseconds(SystemInformation.DoubleClickTime)) Then
        Dim hi As DataGrid.HitTestInfo 
        hi = CType(sender,DataGrid).HitTest(e.X, e.Y) 
        If hi.Type = DataGrid.HitTestType.Cell Then 
          'il est aussi possible de distinguer en fonction du n° de colonne 
          Select Case hi.Column 
            Case 0 : '...etc.. 
            Case Else : '...etc 
          End Select
          'idem avec le n° de ligne
        End 
        Me.ClickTime = DateTime.Now
      End If 
    End Sub
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2002
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 72
    Points : 63
    Points
    63
    Par défaut
    dsl mais ça ne marche pas et ça ne peut pas marcher, pour la raison que j'ai donnée haut, quand on est dans une cellule de la grille il n'y a plus d'evenements sur la grille, pas de double clic, pas de mouse down...
    donc le premier mouse down est bien declancher mais le 2 eme non.

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Au temps pour moi
    Lorsque tu procèdes à l'initialisation des DataGridTextBoxColumn, ajoutes ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AddHandler dgtc.TextBox.MouseDown, New MouseEventHandler(AddressOf Cell_MouseDown)
    Ensuite remplacer les codes precédents par
    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
     
    'repere temporel du click 
    Private ClickTime As DateTime 
    'initialiser dans le constructeur 
    Public Sub New() 
      MyBase.New() 
      InitializeComponent() 
      Me.ClickTime = DateTime.Now 
    End Sub 
    Private Sub Cell_MouseDown(sender As Object, e As MouseEventArgs)
      If DateTime.Now < Me.ClickTime.AddMilliseconds(SystemInformation.DoubleClickTime)) Then 
        '...le code souhaité 
      End If 
    End Sub
     
    Private Sub DataGrid1_MouseDown(sender As Object, e As MouseEventArgs) Handles DataGrid1.MouseDown 
      Me.ClickTime = DateTime.Now 
    End Sub
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2002
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 72
    Points : 63
    Points
    63
    Par défaut
    c'est bon merci.
    en simplifiant ton code ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     Private Sub Cell_MouseDown(ByVal sender As Object, ByVal e As System.EventArgs)
            MessageBox.Show("doubleclick2")
        End Sub
     
    AddHandler dgtc.TextBox.MouseDown, New MouseEventHandler(AddressOf Cell_MouseDown)
    en faite pas la peine de calculer le temps. merci beaucoup !

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

Discussions similaires

  1. [WPF {toolkit}] Comment avoir un double header dans une DataGrid ?
    Par XREvo dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 28/01/2010, 15h31
  2. Intercepter un double click dans une CListBox
    Par kurtisnotdead dans le forum MFC
    Réponses: 3
    Dernier message: 12/02/2008, 17h44
  3. Désactiver le "double-click" dans une appli
    Par Tchaill39 dans le forum Delphi
    Réponses: 30
    Dernier message: 05/04/2007, 16h51
  4. [VB.NET] Click dans une Datagrid
    Par YLF dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/03/2006, 15h55
  5. [VB.NET] Disparition scrollBar dans une DataGrid
    Par aphykite dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/10/2004, 10h29

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