从listview拖放到tablelayoutpanel

时间:2014-01-08 23:33:18

标签: vb.net

我正在尝试构建一个控件来实现tablelayoutpanel,用于设计和放置控件中的其他控件 - 我需要添加一些功能,这将允许tablelayoutpanel接受listview中的内容(它甚至不需要处理在这一点上它以任何方式) - 但是,我无法让tablelayout面板显示它将接受数据 - 仅显示圆/斜杠符号。它们保存在同一父母的2个独立的儿童mdi表格中。

目前我的列表视图中有

Private Sub Jboard_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.AllowDrop = True
    ListView2.AllowDrop = True
end sub
Private Sub ListView2_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragOver, ListView2.DragOver
    If e.Data.GetDataPresent(GetType(ListViewItem)) Then
        e.Effect = DragDropEffects.All
    End If
End Sub

Private Sub ListView2_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView2.MouseDown
    Dim item As ListViewItem = ListView2.HitTest(e.Location).Item
    If item IsNot Nothing Then
        ListView2.DoDragDrop(item, DragDropEffects.All)
    End If
End Sub

在我的新tablelayoutpanel控制表单上

Me.AllowDrop = True
DboardScheduler1.AllowDrop = True
'dboardscheduler1 is my new control

在我控制的代码

tablelayoutpanel1.AllowDrop = true

我错过了什么?

1 个答案:

答案 0 :(得分:1)

看起来你只编写了一面,你还需要告诉TLP(如)控制如何/做什么。像这样的东西(不确定你想要的约束,比如JUST LVs和只有MOVE)。

' NOT mousedown
Private Sub ItemDrag(sender As Object, e As ItemDragEventArgs) Handles ...
   If e.Button <> Windows.Forms.MouseButtons.Left Then Exit Sub

   ' ToDo: Decide what to do with multiples.  Singles only assumed 

   ' add the item under the cusor as the first, effect as Move
   DoDragDrop(e.Item, DragDropEffects.Move)
End Sub

LV Drag OVer:

 ' probably:
 e.Effect = DragDropEffects.None
 ' because you cant really drop it here, but the No Action shows that it knows
 ' a D-D is happening.

TLP Drag OVer:

 If (e.Data.GetDataPresent(GetType(ListViewItem)) = False) Then
       e.Effect = DragDropEffects.None
       Exit Sub
 Else
       e.Effect = DragDropEffects.Move     ' or link maybe
 End If

TLP DragDrop:

  Dim dragLVI As ListViewItem 

 ' get text and do whatever with it
 If (e.Data.GetDataPresent(GetType(ListViewItem)) = False) Then
       e.Effect = DragDropEffects.None
       Exit Sub
 Else
     dragLVI = CType(e.Data.GetData(GetType(ListViewItem)), _
                                    ListViewItem)
     newTextThing = dragLVI.SubItems(0).Text
 End If

这些方面的东西。关键是你必须为要删除的部分编写代码。