簡體   English   中英

在datagridview的其他列中禁用拖放

[英]Disable drag drop in other columns in datagridview

如何禁用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

實際上,您已經擁有了完成所需的一切,事實上,您已經差不多完成了。

命中測試信息包含您需要的所有信息。 只需修改您的代碼以檢查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

如果列索引為零,則意味着我們在第一列上,因此退出該方法,因為我們不希望能夠從中拖放項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM