контекстное меню для ячейки представления данных, заголовка строки и заголовка столбца - PullRequest
8 голосов
/ 20 июля 2011

Я хочу установить другое контекстное меню для ячеек сетки данных, заголовков строк и заголовков столбцов.Идея состоит в том, что, когда я щелкаю правой кнопкой мыши по любому из этих элементов, появляется другое контекстное меню.Как мне это сделать?

Ответы [ 2 ]

19 голосов
/ 20 июля 2011

Используйте событие DataGridView MouseDown, чтобы проверить, была ли нажата правая мышь, и, если это так, используйте связанное свойство HitTestInfo, чтобы определить, была ли нажата ячейка, строка или столбец.Используйте эту информацию для отображения необходимой вам ContextMenuStrip.

Вот пример MouseDown события, которое делает это.Чтобы попробовать пример, перетащите DataGridView и три ContentMenuStrips на форму.Назовите ContentMenuStrips mnuCell, mnuRow и 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

Здесь я назначаю свойство ContextMenuStrip объекта DataGridView для ContextMenuStrip, подходящего для элемента, щелкаемого правой кнопкой мыши (ячейка, строка или столбец).Чтобы продемонстрировать, как вы можете дополнительно настроить поведение ContextMenuStrips, я также устанавливаю текст в каждом пункте меню ContentMenuStrips.

2 голосов
/ 20 июля 2011

В событии MouseDown объекта DataGridView используйте метод DataGridView.HitTest, чтобы проверить, что было нажато.Затем вы можете переключать контекстные меню в зависимости от того, что было нажато.

...