web-dev-qa-db-ja.com

ListViewでアイテムの選択を解除するにはどうすればよいですか?

いくつかのアイテムを含むListViewがあります。 ListViewがフォーカスを失っても、最後に選択されたListViewItemは、灰色の背景で「選択」されたままです。
ListView.FocusLostでそれを実現したいので、選択が失われるため、ListView.SelectedIndexChangedイベントが発生します。
何か案は?

.NET CF3.5を使用しています。

10
Zeemee

親フォーム/コントロールからListViewにアクセスしているとします。

このコードは、フォームの/ controlのコンストラクター/ loadイベントに追加できます。

this.myListView.LostFocus += (s, e) => this.myListView.SelectedIndices.Clear();

さて、あなたの場合、そのデリゲートを次のように置き換えます。

if (this.myListView.SelectedIndices.Count > 0)
    for (int i = 0; i < this.myListView.SelectedIndices.Count; i++)
    {
        this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false;
    }

ところで、コードにもっと良い形を与えることができます。

19
Vladimir
myListView.SelectedItems.Clear();
5
Dave

私はこれが遅いことを知っていますが、誰かが解決策を必要とした場合に備えて、私は解決策に追加したいと思います。

選択解除されたアイテムにフォーカスがないようにするには、Focusedプロパティをfalseに設定する必要があります。

for (int i = 0; i < this.myListView.SelectedIndices.Count; i++)
{
    this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false;
    this.myListView.Items[this.myListView.SelectedIndices[i]].Focused = false;
}
2
Brian Overby

これに取り組む別の効果的な方法は次のとおりです。

foreach (ListViewItem i in myListView.SelectedItems)
{
    i.Selected = false;
}
1
Jeff

これは簡単です。

this.myListView.SelectedIndex = -1;
this.myListView.Update();
1
Jason Jakob

ItemTemplateではなくEditItemTemplateを使用している場合は、ListView1.SelectedIndex = -1;の理由を理解しようとしている可能性があります。動作していません。これは、ListView1.EditIndex = -1を使用する必要があるためです。

0
tommylux

あなたはそれを試すことができます:

MyList.ItemSelected += (sender, e) => {
    ((ListView)sender).SelectedItem = null;
};

または、ビューコードbehind(xaml.cs)でOnSelectionを作成している場合:

 private void OnSelection(object sender, SelectedItemChangedEventArgs e)
        {
           ((ListView)sender).SelectedItem = null;
        }

よろしく

0