2016-04-25 27 views
1

を削除した後、リストビューにドラッグを右クリックしてここでのシナリオです:マウスの左ボタンを使用して左クリックドラッグは、項目

  1. 、ドロップターゲット上にリストビュー(詳細ビュー)から項目をドラッグします。すべてが良いです。
  2. マウスの右ボタンを使用して、同じ操作を行います。 All is good、マウスの左ボタンと同じ振る舞いを示します。
  3. マウスの左ボタンを使用して、アイテムをリストビューからドロップターゲットにドラッグします。ターゲットはドラッグされたアイテムをリストビューから削除します。すべてが良いです - アイテムは削除されます。
  4. 繰り返し#3。アイテムは削除され、後続のアイテムは他のマウスジェスチャーなしで正常にドラッグできます。
  5. 右マウスを使用して、#3を繰り返します。すべてがうまくいかない - ドラッグアクションは決して始まらない。
  6. マウスの左ボタンを使用して、リストビュー内の項目をクリックしてから離します。
  7. マウスの右ボタンを使用して、アイテムをドロップターゲットにドラッグします。すべてが良いです!

要約すると、左または右のマウスボタンを使用してリストビューからドラッグされたアイテムは同じ働きをします。ただし、ドロップターゲットが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 
+1

AFAIKは期待された動作ではありません。バグのように聞こえる...サンプルコードを見せてもらえますか? –

+0

もちろん、元の投稿に追加しました。 –

答えて

0

Private activeDrag As Boolean 
Private Sub ListView1_MouseMove(sender As Object, e As MouseEventArgs) Handles ListView1.MouseMove 
    If (Not activeDrag) AndAlso (e.Button = Windows.Forms.MouseButtons.Right) AndAlso (Me.ListView1.SelectedItems.Count > 0) Then 
     Dim x As ItemDragEventArgs = New ItemDragEventArgs(e.Button, Me.ListView1.SelectedItems.Item(0)) 
     Me.ListView1_ItemDrag(Me, x) 
    End If 

End Sub 

DoDragDrop関数が呼び出される前にactiveDrag変数がtrueに設定されている

はここに関連するコードですそれが返ってきたらfalseに設定します。