0

C# WinForms:

このようないくつかのアプリケーションでは:

ここに画像の説明を入力

「すべて選択」ボタンのコードを書きたい。リストビューの「SelectedIndex」または「selected Item」プロパティがゼロより大きいかどうかを確認すると、ユーザーがそれらの白い領域内をクリックした場合はどうなるでしょうか?

また、「SelectAll」ボタンをクリックしても手遅れなので、form.ActiveControl も機能しません。ActiveControl はその SelectAll ボタンです。

おそらく、どのコントロールがクリックされたかなどを記憶するためにクラスレベルの変数を作成することもできます..しかし、もっと良い方法があるはずだと思います....しかし、何?!

ありがとう

4

1 に答える 1

2

このようなメソッドに「GotFocus」イベントを割り当て、この方法で「最後にフォーカスされた」コントロールを記録することができます。次に、SelectAll_CLickハンドラーで、リストビューが割り当てられている場合はselectall、それ以外の場合は選択しないでください。

private ListView mLastSelectedListView;

private void ListViews_GotFocus(object sender, EventArgs e)'
{
    ListView lv = sender as ListView;
    if (null == lv) return;
    mLastSelectedListView = lv;
}

private void SelectAll_Click(object sender, EventArgs e)
{
    if (null == mLastSelectedListView) return;
    mLastSelectedListView.SelectAll();
}

上記をサポートするための簡単な「SelectAll」拡張メソッドを次に示します。

public static class ListViewExtensions
{
    public static void SelectAll(this ListView lv)
    {
        foreach (ListViewItem item in lv.Items)
            item.Selected = true;

    }
}
于 2012-05-28T00:44:33.683 に答える