【发布时间】:2016-04-25 13:00:50
【问题描述】:
这是场景:
- 使用鼠标左键,将列表视图(详细信息视图)中的项目拖到放置目标上。一切都很好。
- 使用鼠标右键执行相同的操作。一切都很好,表明行为与鼠标左键相同。
- 使用鼠标左键,将一个项目从 Listview 拖到一个放置目标上,目标从 Listview 中删除拖动的项目。一切正常 - 项目已移除。
- 重复 #3。一切都很好——项目被移除,表明后续项目可以成功拖动,无需任何其他鼠标手势。
- 使用鼠标右键,重复#3。一切都不好——拖拽动作从未开始。
- 使用鼠标左键单击列表视图中的项目并释放它。
- 使用鼠标右键,将项目拖动到放置目标。一切都很好!
总而言之,使用鼠标左键或右键从 Listview 拖动的项目的工作方式相同。但是,一旦放置目标从 Listview 中删除了一个项目(即使它是被拖动的项目也无关紧要),鼠标右键拖动将停止工作,直到使用鼠标左键单击 Listview 项目。
这是预期的行为吗?如果是,为什么?有没有一种解决方法,让我可以让鼠标左键和右键都一样工作?
以下是相关代码:
Private Sub ListView1_ItemDrag(sender As Object, e As ItemDragEventArgs) Handles ListView1.ItemDrag
ListView1.DoDragDrop(ListView1.SelectedItems.Item(0), DragDropEffects.Link)
End Sub
Private Sub TextBox1_DragDrop(sender As Object, e As DragEventArgs) Handles TextBox1.DragDrop
Dim item As ListViewItem = e.Data.GetData(GetType(ListViewItem))
If rbRemove.Checked Then
Dim index As Int32 = ListView1.SelectedIndices.Item(0)
For i As Int32 = 0 To ListView1.Items.Count - 1
Dim item1 As ListViewItem = ListView1.Items(i)
If item1 Is item Then
ListView1.Items.RemoveAt(i)
Exit For
End If
If index >= ListView1.Items.Count Then
index -= 1
End If
ListView1.Items(index).Selected = True
Next
End If
End Sub
Private Sub TextBox1_DragOver(sender As Object, e As DragEventArgs) Handles TextBox1.DragOver
e.Effect = DragDropEffects.Link
End Sub
【问题讨论】:
-
这不是 AFAIK 的预期行为。听起来像一个错误……你能给我们看一些示例代码吗?
-
好的,刚刚添加到原帖中。