Я использую следующий метод, чтобы выбрать все элементы в ListView:
private void listView_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.A)
{
foreach (ListViewItem item in listView.Items)
item.Selected = true;
e.Handled = true;
}
}
Когда я щелкаю по уже выбранному элементу и затем нажимаю Ctrl + A, он выбирает все элементы, но через 1 секунду выбор возвращается к единственному элементу, который был нажат.
Решение
Я не смог найти, где ListView запускает таймер или изменяет выбор, просто игнорирование WM_TIMER не останавливает таймер, поэтому мы должны восстановить выбор вручную:
public class CustomListView : ListView
{
private const int WM_TIMER = 0x113;
protected override void WndProc(ref Message m)
{
if (m.Msg != WM_TIMER)
{
base.WndProc(ref m);
}
else
{
var selectionCache = Items.Cast<ListViewItem>().Select(x => x.Selected).ToArray();
BeginUpdate();
base.WndProc(ref m);
for (int i = 0; i < Items.Count; i++)
Items[i].Selected = selectionCache[i];
EndUpdate();
}
}
}