Im, использующий multi-select ListView в C# .NET 4.5 Проблема возникает при выборе нескольких элементов (например, Shift + End или Shift + Click и т. Д.). Это всего лишь несколько примеров из множества различных комбинаций мыши/клавиатуры для мульти-выбора конечно ..C# ListView ItemSelectionChanged Событие Multi Выбрать получить ТОЛЬКО последний выбранный элемент
Это мой обработчик события при выборе элементов в списке:
private void lvTitles_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
MessageBox.Show(e.Item.Text.ToString());
//MessageBox just for testing I am actually running a SQL query here
}
Моя проблема заключается в том, что если я выбираю 500 элементов событие срабатывает 500 раз. Цель состоит в том, чтобы получить последний элемент, выбранный пользователем (с помощью сочетаний клавиш/мышей, упомянутых выше), и сделать что-то с ним ... в моем случае мне нужно запустить SQL-запрос против него.
Если я нажму сначала на элемент 0 в списке, это нормально для запуска запроса, тогда, когда вы сдвигаете + конец, выделяются все остальные, и я хочу, чтобы он выполнял запрос только по последнему выбранному элементу. Вместо этого он работает на каждом элементе между ними.
РЕДАКТИРОВАТЬ: В другом примечании событие срабатывает, поскольку оно также отменяет выбор, и в этом случае он действительно ничего не должен делать при отмене выбора.
Мне нужен ряд действий, которые обычно ожидаются пользователем, такие как клавиатура Ctrl-A, Shift + End, Shift + стрелка вниз ... и т. Д., А также мышь Click + Shift и Mouse Click + Ctrl ... и все остальные соображения – Kairan
При запуске и выполнении одного выбора окно сообщения не всплывает в течение 5 секунд .. это будет работать, только если вы точно знаете, сколько времени потребуется, чтобы бежать заранее ... Мне интересно, есть ли что-то, что может быть вытащил из этого другого сообщения SO, чтобы мне было полезно: http://stackoverflow.com/questions/3666678/how-do-you-respond-once-to-a-user-selecting-a-range-in-a-listview -control – Kairan
Это сообщение SO определенно выглядит как допустимый вариант. Я предлагаю, так как у вас есть код для обоих, почему бы вам не попробовать их и посмотреть, работает ли для вас работа. Я использовал 5 секунд в качестве примера. Вы можете изменить все, что хотите, 1 секунду, полсекунды. Он делает то, что он вызывает MessageBox.Show (e.Item.Text.ToString()) «X» секунд после последнего запуска lvTitles_ItemSelectionChanged(). –