LoginSignup
1
1

More than 1 year has passed since last update.

ListViewの全項目を(ちょっとだけ)高速に選択する

Posted at

参考にした記事
ListBoxの全項目を高速に選択する - Qiita

テストコード
private void listView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.A && e.Control)
    {
        foreach (ListViewItem item in listView1.Items)
        {
            item.Selected = true;
        }
    }
    if (e.KeyCode == Keys.Q && e.Control)
    {
        if (0 < listView1.Items.Count)
        {
            listView1.Items[0].Selected = true;
            SendKeys.SendWait("{HOME}+{END}");
        }
    }
}

元のコードはSendKeys.SendWait("{HOME}+{END}");のみだったが、ListViewで途中を選択した状態から始めると最初のほうが選択されなかったので、最初の1個だけSelectedで選択するようにした。

体感的には、SendKeyのほうがわずかに早い。といっても、数百くらいなら体感差は無く、1万くらいになると差が出てくる感じ。古いPCなので、最近のPCならもっと差は縮まるかも。

アイテムが大量にある場合、foreach Selectedでは、キーを押してからGUIが変わるのに少し待ち時間があるが、SendKeyの場合は、キーを押したら瞬時に最初の1個が選択されて、それから少し遅れてすべてが選択されるので、視覚的に操作が開始されたことがわかりやすいSendKeyのほうが使い勝手は良さそう。

foreach Selectedでは、すべてを選択した際に、スクロール位置は変化しない。SendKeyの場合は、最初に一番上までスクロールし、続いて一番下までスクロールする。このあたりの見た目の動きは好みで分かれそう。

// DLLを叩くと素早く一気に選択できるらしいんだけど、コード量が一気に増えるのと、今のところは数百から最大でも2万弱までの見込みなので、今回は未確認

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1