Отключить перетаскивание в других столбцах в сетке данных - PullRequest
0 голосов
/ 15 мая 2018

Как отключить перетаскивание в других столбцах в datagridview?Как я хочу отключить перетаскивание в столбце 1, а остальные не отключеныКак этого добиться?

Это мой код для перетаскивания:

Private CR As Integer, CC As Integer, CV As Object
Private Sub DataGridView1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView1.DragDrop
    Dim ClientPoint As Point = DataGridView1.PointToClient(New Point(e.X, e.Y))
    Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(ClientPoint.X, ClientPoint.Y)
    CR = hit.RowIndex : If CR < 0 Then Exit Sub
    CC = hit.ColumnIndex : If CC < 0 Then Exit Sub
    DataGridView1.Item(CC, CR).Value = CV
End Sub
Private Sub DataGridView1_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView1.DragOver
    e.Effect = DragDropEffects.Move
End Sub
Private Sub DataGridView1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
    Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y)
    CR = hit.RowIndex : If CR < 0 Then Exit Sub
    CC = hit.ColumnIndex : If CC < 0 Then Exit Sub
    CV = DataGridView1.Item(CC, CR).Value : If CV Is Nothing Then Exit Sub
    DataGridView1.DoDragDrop(CV, DragDropEffects.Move)
End Sub

1 Ответ

0 голосов
/ 15 мая 2018

У вас уже есть все, что вам нужно для того, чтобы делать то, что вы хотите, но вы уже почти сделали это.

Информация о проверке удара содержит всю необходимую вам информацию.Просто измените свой код, чтобы проверить ColumnIndex и соответственно изменить курсор (эффект):

Private Sub DataGridView1_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView1.DragOver
    Dim ClientPoint As Point = DataGridView1.PointToClient(New Point(e.X, e.Y))
    Dim hit As DataGridView.HitTestInfo = DataGridView1.HitTest(ClientPoint.X, ClientPoint.Y)

    If hit.ColumnIndex <= 0 Then
        'If we're at the first column (or no column) display a "stop" cursor.
        e.Effect = DragDropEffects.None
    Else
        'For all other columns display a "move" cursor.
        e.Effect = DragDropEffects.Move
    End If
End Sub

Затем в и ваш DragDrop обработчик событий и событие MouseDownобработчик, измените это:

CC = hit.ColumnIndex : If CC < 0 Then Exit Sub

на это:

CC = hit.ColumnIndex : If CC <= 0 Then Exit Sub

Если индекс столбца равен нулю, это означает, что мы находимся на первом столбце, поэтому выйдите из метода, так как мы нея не хочу иметь возможность перетаскивать элементы из него / из него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...