【问题标题】:listbox selectionmode = multiextended how to get rid of selecting items with mousekey downlistbox selectionmode = multiextended 如何摆脱鼠标按下时选择项目
【发布时间】:2010-07-26 21:44:15
【问题描述】:

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

  1. 按住 shift 键的同时按下鼠标键
  2. 按住 ctrl 键的同时按下鼠标键
  3. 将鼠标移到未选中的项目上时按下鼠标键

1 和 2. 正是我想要的行为,但我不想要 3。 因为稍后我想通过用鼠标上下移动所有选定的项目来重新排列项目。

如何摆脱3.?

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

【问题讨论】:

    标签: c# .net listbox


    【解决方案1】:

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

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

    需要设置适当的属性。

    【讨论】:

    • 有多重简单和多重扩展模式。在多重简单模式下,我不能使用 crtl 和 shift 键
    • 您在谈论 Win Forms 吗?我的帖子是关于 WPF 的
    • @tomfox66 你应该适当地标记你的问题。
    【解决方案2】:

    您需要“扩展”模式,但不希望鼠标拖动选择,除非按下 shift 或 control 键。与其尝试退出功能,不如添加功能。试试这个。

    • 将表单上的“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
    

    【讨论】:

      猜你喜欢
      • 2013-08-27
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      相关资源
      最近更新 更多