6

この記事は最終更新日から5年以上が経過しています。

投稿日

ListBoxの全項目を高速に選択する

ListBoxの全項目を選択したいとする。
selectall.png

SelectAll的なメソッドは存在しないので、自前で頑張る必要がある。

素朴な実装(これはダメ)

素朴な実装
for (int i = 0; i < listBox1.Items.Count; i++)
{
    listBox1.SetSelected(i, true);
}

ぱっと思いつくのがこの方法だが、残念ながら、遅い。

Windows APIを使ってみる

宣言
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
private const int LB_SETSEL = 0x185;
処理
SendMessage(listBox1.Handle, LB_SETSEL, 1, -1);
listBox1.SetSelected(0, true);

Windows APIを使って全選択メッセージを直接送ってやる方法だ。これなら一瞬だ。

SendKeysしてみる

先述の方法で充分なのだが、もっと簡単に一行で済ます方法もある。

SendKeys
SendKeys.SendWait("{HOME}+{END}");

HOMEキーで先頭を選択し、SHIFTキーを押しながらENDキーで最終項目まで選択するという操作を再現している。これも一瞬だ。
予め全選択したいコントロールにフォーカスが合っている必要がある。

(この記事は昔書いた記事から余計な演出と遠回りを省いて再掲したものです。)

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
ログインすると使える機能について
mifumi323
いつも役に立ってくれていたのは、「いいね」の数が0や1の記事だった。
この記事は以下の記事からリンクされています

コメント

いいと思います。
勉強になりました。

0
あなたもコメントしてみませんか :)
新規登録
すでにアカウントを持っている方はログイン
記事投稿キャンペーン開催中
ChatGPTなどの活用方法を発信しよう!
~
6