【发布时间】:2010-07-26 21:44:15
【问题描述】:
将列表框选择模式设置为多扩展时,我观察了三种选择项目的方法:
- 按住 shift 键的同时按下鼠标键
- 按住 ctrl 键的同时按下鼠标键
- 将鼠标移到未选中的项目上时按下鼠标键
1 和 2. 正是我想要的行为,但我不想要 3。 因为稍后我想通过用鼠标上下移动所有选定的项目来重新排列项目。
如何摆脱3.?
我需要像 Winamp 中的播放列表一样的行为。通过拖动和复制粘贴项目重新排列项目
【问题讨论】:
将列表框选择模式设置为多扩展时,我观察了三种选择项目的方法:
1 和 2. 正是我想要的行为,但我不想要 3。 因为稍后我想通过用鼠标上下移动所有选定的项目来重新排列项目。
如何摆脱3.?
我需要像 Winamp 中的播放列表一样的行为。通过拖动和复制粘贴项目重新排列项目
【问题讨论】:
ListBox 类有两个 SelectionMode。多个或扩展。
在多模式下,您可以通过单击来选择或取消选择任何项目。在扩展模式下,您需要按住 按下 Ctrl 键可选择其他项目,或按下 Shift 键可选择一系列项目。
需要设置适当的属性。
【讨论】:
您需要“扩展”模式,但不希望鼠标拖动选择,除非按下 shift 或 control 键。与其尝试退出功能,不如添加功能。试试这个。
使用此代码添加在按下 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
【讨论】: