ListView选择计时器

时间:2010-02-16 09:58:01

标签: c# winforms listview

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

0 个答案:

没有答案