listbox selectionmode = multiextended如何摆脱使用mousekey选择项目

时间:2010-07-26 21:44:16

标签: c# .net listbox

当将列表框选择模式设置为multiextended时,我观察了三种选择项目的方法:

  1. 按住shift键的同时按下鼠标键
  2. 按住ctrl键
  3. 按住鼠标键
  4. 将鼠标移到未选择的项目上时按鼠标键
  5. 1和2.正是我想要的行为,但我不想要3。 因为后来我想用鼠标上下移动所有选定的项目来重新排列项目。

    如何摆脱3.?

    我需要像Winamp中的播放列表一样的行为。通过拖动和复制粘贴项重新排列项目

2 个答案:

答案 0 :(得分:4)

ListBox类有两个SelectionMode。多个或扩展。

  

在多种模式下,您可以通过单击选择或取消选择任何项目。在扩展模式下,您需要按住   按Ctrl键选择其他项目,或按Shift键选择一系列项目。

需要设置适当的属性。

答案 1 :(得分:1)

您需要“扩展”模式,但除非按下移位或控制键,否则不希望鼠标拖动选择。而不是试图退出功能,你应该添加功能。试试这个。

  • 将表单上的“KeyPreview”设置为 “真”。
  • 为您设置SelectionMode ListBox回到“MultiSimple”。

使用此代码添加按下Control或Shift时选择项目的功能。

Public Class Form1
    Private bSelectMode As Boolean = False

    Private Sub Form1_KeyUpOrDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown, Me.KeyUp
        bSelectMode = e.Control OrElse e.Shift
    End Sub

    Private Sub ListBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseMove
        If bSelectMode AndAlso e.Button <> Windows.Forms.MouseButtons.None Then
            Dim selectedindex = ListBox1.IndexFromPoint(e.Location)

            If selectedindex <> -1 Then
                ListBox1.SelectedItems.Add(ListBox1.Items(selectedindex))
            End If
        End If
    End Sub
End Class