3

ListBox 内のすべての項目を選択しようとしており、この目的のためにこの拡張メソッドを作成しました。

    public static void SetSelectedAllItems(this ListBox ctl)
    {
        for (int i = 0; i < ctl.Items.Count; i++)
        {
            ctl.SetSelected(i, true);
        }
    }

問題は、ListBox に多数のアイテムがある場合、このタスクを完了するのに時間がかかり、ListBox が自動的に下にスクロールしてアイテムを選択する様子を確認できることです。

タスクがより速く終了するように、コントロールの更新を一時的に一時停止する方法はありますか? 私は使用してみました:

ctl.SuspendLayout();
  for (int i = 0; i < ctl.Items.Count; i++)
  ...
ctl.ResumeLayout();

しかし、それは何もしないようです。

4

1 に答える 1

8

BeginUpdateおよびメソッドを呼び出してEndUpdate、コントロールのプロパティが設定されている間、コントロールの描画/レンダリングを防止します。

改訂されたコードは次のとおりです。

public static void SetSelectedAllItems(this ListBox ctl)
{
    ctl.BeginUpdate();

    for (int i = 0; i < ctl.Items.Count; i++)
    {
        ctl.SetSelected(i, true);
    }

    ctl.EndUpdate();
}

SuspendLayoutandを呼び出してみたとのことですがResumeLayout、それはコントロールのレイアウト イベントにのみ影響します。Sizeこのメソッドのペアは、 、LocationAnchor、またはDockプロパティを設定する場合など、他のコントロールに対するコントロールの位置を変更する場合に使用されます。

于 2013-03-13T23:28:04.020 に答える