2010-03-26 6 views
4

J'ai une vue de données sur laquelle j'ai placé un ContextMenuStrip1. Je voudrais qu'il supprime une ligne dans le datagridview quand la ligne est cliquée à droite et ils cliquent sur "supprimer la ligne". J'ai la suppression fonctionnant et le menu apparaît mais cela ne déclenche pas quand vous faites un clic droit sur le datagridview.Datagridview - Mise au point sur la cellule qui a été cliquée avec le bouton droit

C'est là où je suis en train de la ligne à modifier:

Private Sub ModifyRowToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModifyRowToolStripMenuItem.Click 
    If Not datagridview_TagAssignment.CurrentRow Is Nothing Then 
     datagridview_TagAssignment.CurrentCell = datagridview_TagAssignment.Item(0, datagridview_TagAssignment.CurrentRow.Index) 
     datagridview_TagAssignment.BeginEdit(True) 
    End If 
    End Sub 

Je suis toujours sur la ligne terminais (0) et jamais la ligne I faites un clic droit sur.

Private Sub datagridview_TagAssignment_CellMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles datagridview_TagAssignment.CellMouseClick 
    If e.Button = Windows.Forms.MouseButtons.Right AndAlso e.RowIndex >= 0 Then 
     datagridview_TagAssignment.Rows(e.RowIndex).Selected = True 
    End If 
    End Sub 

Quelqu'un a des suggestions?

Répondre

5
Private Sub DataGridView1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseClick 
    If e.Button = Windows.Forms.MouseButtons.Right Then 
     rowClicked = DataGridView1.HitTest(e.Location.X, e.Location.Y).RowIndex 
     ContextMenuStrip1.Items.Add(rowClicked.ToString) 
     ContextMenuStrip1.Show(DataGridView1, e.Location) 
     ContextMenuStrip1.Items.Clear() 
    End If 
End Sub 

Modifier: Mis à jour pour gérer une bande de menus contextuels.

Cela devrait vous donner l'indice de ligne de la ligne qui a été cliquée avec le bouton droit de la souris en utilisant les coordonnées de la souris. Ce qui devrait vous permettre de supprimer la ligne basée sur la connaissance de l'index.

Modifier

par votre commentaire sur ce ne fonctionne pas c'est mon code

J'ai une solution avec un WinForm avec un datagridview ajouté. et c'est le code dans le formulaire.

Public Class Form1 

    Dim bindS As New BindingSource 
    Dim rowClicked As Integer 
    Private Sub DataGridView1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseClick 
     If e.Button = Windows.Forms.MouseButtons.Right Then 
      rowClicked = DataGridView1.HitTest(e.Location.X, e.Location.Y).RowIndex 
      ContextMenuStrip1.Items.Add(rowClicked.ToString) 
      ContextMenuStrip1.Show(DataGridView1, e.Location) 
      ContextMenuStrip1.Items.Clear() 
     End If 

    End Sub 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Dim s As New List(Of String) 
     s.Add("String one") 
     s.Add("String Two") 
     bindS.DataSource = s 
     DataGridView1.DataSource = bindS 


    End Sub 
End Class 

Un clic droit sur une ligne montre l'index de ligne correcte

Assurez-vous que les args événement que vous manipulez sont les System.Windows.Forms.MouseEventArgs j'ai remarqué que vous manipulez la cellule cliquez sur

+0

J'ai ajouté ce et mettre un débogage sur cette ligne et il ne s'est pas arrêté quand j'ai cliqué droit sur le datagridview. C'est vraiment ce que mon problème a été depuis le début. Est-ce que je n'ai pas une bonne configuration pour le clic droit sur le clic de souris? – ErocM

+0

Laissez-moi vérifier le mien et voir. – msarchet

+0

Vérifiez les modifications que j'ai ajoutées. – msarchet

Questions connexes