2011-07-20 12 views

Odpowiedz

17

Użyj zdarzenia DataGridView o numerze MouseDown, aby sprawdzić, czy kliknięto prawą mysz, a jeśli tak, użyj powiązanej właściwości HitTestInfo, aby określić, czy kliknięto komórkę, wiersz lub kolumnę. Użyj tych informacji, aby wyświetlić ContextMenuStrip, którego potrzebujesz.

Oto przykład zdarzenia, które to robi. Aby wypróbować próbkę upuść DataGridView i trzy ContentMenuStrips na formularzu. Nazwij ContentMenuStrips mnuCell, mnuRow i mnuColumn.

Private Sub DataGridView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown 
    If e.Button = Windows.Forms.MouseButtons.Right Then 
     Dim ht As DataGridView.HitTestInfo 
     ht = Me.DataGridView1.HitTest(e.X, e.Y) 
     If ht.Type = DataGridViewHitTestType.Cell Then 
      DataGridView1.ContextMenuStrip = mnuCell 
      mnuCell.Items(0).Text = String.Format("This is the cell at {0}, {1}", ht.ColumnIndex, ht.RowIndex) 
     ElseIf ht.Type = DataGridViewHitTestType.RowHeader Then 
      DataGridView1.ContextMenuStrip = mnuRow 
      mnuRow.Items(0).Text = "This is row " + ht.RowIndex.ToString() 
     ElseIf ht.Type = DataGridViewHitTestType.ColumnHeader Then 
      DataGridView1.ContextMenuStrip = mnuColumn 
      mnuColumn.Items(0).Text = "This is col " + ht.ColumnIndex.ToString() 
     End If 
    End If 
End Sub 

Tutaj jestem przypisanie własności ContextMenuStrip DataGridView jest do odpowiedniego ContextMenuStrip dla elementu kliknięciu prawym przyciskiem myszy (komórki, wiersza lub kolumny). Aby zademonstrować, jak możesz dalej dostosować zachowanie ContextMenuStrips, ustawiam również tekst w każdym punkcie menu ContentMenuStrips.

+0

dzięki, mam trzy menu kontekstowe, jedno dla wiersza, kolumny i komórki. Ustawiłem menu kontekstowe wiersza w tym wierszu '" To jest wiersz "', i wyłącz pozostałe dwa nadal pokazuje ono dla, ale pokazuje menu kontekstowe wiersza po kliknięciu komórki. – Smith

+0

@Smith Zaktualizowałem mój przykład o to, co myślę, że potrzebujesz. –

1

W zdarzeniu MouseDown w DataGridView należy użyć metody DataGridView.HitTest, aby sprawdzić, co zostało kliknięte. Następnie możesz przełączać menu kontekstowe w zależności od kliknięcia.

Powiązane problemy