DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ListViewの選択関連のイベント

環境/言語:[C# .Net3.5]
分類:[.NET]

ListViewで複数行選択なしで実装していて項目を選択した場合、
編集用のGroupコンテナを有効にして編集するという実装をしています。

項目選択なしの場合、Groupコンテナを無効にしたいので、
SelectedIndexChangedイベントで選択状態を見て処理を分けて実装したのですが、
項目を選択するたびに、
元の選択を解除⇒次の項目を選択
の2回のイベントが起こりGroupコンテナがチラつきます。

元の選択を解除時を判別してスルー出来ればいいのですが、
選択解除なのか別の項目を選択中のイベントか判別方法が分かりませんでした。

ListViewの選択関連のイベントで選択を切り替えたときには変更のみが検出でき、変更の解除の場合も検出できるような方法は他に何かありますでしょうか?
■No32345に返信(コウさんの記事)

VB.NETですがIdleを使ったサンプルです。

    Private Sub ListView1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListView1.SelectedIndexChanged
        If ListView1.SelectedItems.Count = 0 Then
            AddHandler Application.Idle, AddressOf CheckUnSelect
        Else
            ListBox1.Items.Add(String.Format("{0}", ListView1.SelectedItems(0).Text))
        End If
    End Sub

    Private Sub CheckUnSelect(sender As Object, e As EventArgs)
        RemoveHandler Application.Idle, AddressOf CheckUnSelect
        If ListView1.SelectedItems.Count = 0 Then
            ListBox1.Items.Add("UnSelect")
        End If
    End Sub
■No32355に返信(shuさんの記事)

Application.Idleを使用した方法を別のプロジェクトで実際に検証した結果、
思っている動作にすることは出来ました。

関連があると思わなかったので書いていませんでしたが、
Program.csの中で常に非常に細かい一定時間毎に処理を行いその中で、
Application.DoEvents()により他のイベントの処理を行っていたので、
Application.Idleのイベントは発生しませんでした。

ですが回答の方法は、思いつきもしなかった方法なのでとても参考になりました。
どうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板