listbox selectionmode = multi-extended как избавиться от выбора элементов мышкой вниз - PullRequest
3 голосов
/ 27 июля 2010

При установке режима выбора списка на несколько расширений я наблюдал три способа выбора элементов:

  1. нажатие клавиши мыши при удерживании клавиши Shift
  2. нажатие клавиши мыши, удерживая клавишу Ctrl
  3. нажатие клавиши мыши при наведении мыши на невыбранный элемент

1 и 2. это именно то поведение, которое я хочу, но я не хочу 3. потому что позже я хочу переставить элементы, перемещая все выделенные элементы вверх и вниз с помощью мыши.

Как избавиться от 3.?

Мне нужно поведение, подобное плейлисту в Winamp. Изменение порядка элементов путем перетаскивания и копирования элементов вставки

Ответы [ 2 ]

4 голосов
/ 27 июля 2010

Класс ListBox имеет два SelectionMode.Несколько или расширенный.

В режиме Multiple вы можете выбрать или отменить выбор любого элемента, щелкнув по нему.В расширенном режиме вам нужно удерживать нажатой клавишу Ctrl для выбора дополнительных элементов или клавишу Shift для выбора диапазона элементов.

Необходимо установить только правильное свойство.

1 голос
/ 27 июля 2010

Вы хотите «расширенный» режим, но не хотите выбора перетаскивания мышью, если не нажата клавиша Shift или Control.Вместо того, чтобы пытаться отказаться от функций, вы должны добавить функции.Попробуйте это.

  • Установите "KeyPreview" в вашей форме на "True".
  • Установите 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...