我使用以下方法选择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();
}
}
}