ListView の選択行の青反転について

解決


ほる  2007-06-16 00:29:55  No: 136731

こんにちわ。
ご存知の方がいたら、おしえてください。
現在 VB.NET2005 XP の環境です。

Listview内で、データ(ADDしたデータ)のない行を
マウスでクリックすると
青反転が消えてしまうのですが、
どこかでListView内のデータがない行を
マウスでクリックしても無視するという設定ができるのでしょうか?

ちなみにListView1.HideSelection = False は設定してます。

宜しくお願いします。


ほる  2007-06-16 00:55:40  No: 136732

すいません。
もう少し現状を追加します。

やりたい事は、常に青反転の状態にしたいです。
ListView以外をクリックするとグレーになるのは問題ないです。


特攻隊長まるるう  2007-06-16 03:15:36  No: 136733

HitTest 関連で判定はできるかも?

[ListView.HitTest メソッド]
http://msdn2.microsoft.com/ja-jp/library/f7548bw9(VS.80).aspx
[ListViewHitTestLocations 列挙体]
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.listviewhittestlocations(vs.80).aspx


ほる  2007-06-18 19:46:37  No: 136734

特攻隊長まるるうさん。
お返事ありがとうございます。

Private Sub ListView1_MouseDown(ByVal sender As Object, _
 ByVal e As System.Windows.Forms.MouseEventArgs)  _ 
ListView1.MouseDown

内で、

 Dim lv As ListViewItem = Me.ListView1.GetItemAt(e.X, e.Y)
 Dim itemsCount As Integer = ListView1.Items.Count
     If itemsCount = 0 Then
       Me.ListView1.Items(itemsCount - 1).Selected = True
       Me.ListView1.Select()  'ListView をアクティブにする
     End If

教えて頂いたHitTestではありませんが、
このロジックで判定は何とかできています。

やはり上記でも青反転は消えてしまいます。

他に何か考えられる原因があるのでしょうか?
もし何かご存知でしたら、教えてください。
宜しくお願いします。


特攻隊長まるるう  2007-06-19 01:09:14  No: 136735

リストビューの内部処理を常識的に類推すると、
・マウスのクリック検地
・クリック位置のアイテム判定
・選択アイテムの変更
…といった感じでしょうから

>・マウスのクリック検地
 ・選択行を強制
>・クリック位置のアイテム判定
>・選択アイテムの変更
…という処理を入れても、その後の処理はブロックされないのでは?
テストしたいなら SelectedIndexChanged イベントあたりにログを
出力するコードを入れておいて、選択行がどう変化しているか?を
調べてみては?

…どうすれば解決するか…は、ちょっと思いつきません。というか…いまいちな
方法しか…
案1.タイマーでイベント処理の後からイベントを起こす。
案2.リストビューの Enabled を変更してみる(未検証。うまくいけばその後の
  処理がブロックされる場合がありますw)
案3.リストビューを継承して ListView.WndProc メソッドから Windows Message
  をブロックしてみる(話が長くなるww)

うーん。他の方の書込みに期待しましょう(滅


matsu  2007-06-20 00:44:51  No: 136736

MouseUpイベントで選択状態に戻すのはどうでしょうか?
複数選択の場合は考えていませんが。

Private Sub ListView1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseUp
    Static selItem As ListViewItem

    If ListView1.SelectedItems.Count = 0 Then
        If selItem Is Nothing Then
        Else
            selItem.Selected = True
        End If
    Else
        selItem = ListView1.SelectedItems.Item(0)
    End If
End Sub


ほる  2007-06-25 21:56:53  No: 136737

返事が遅くなり、すいませんでした。
matsuさんのMouseUpイベントで、うまくいきました。
本当に助かりました。

特攻隊長まるるうさん。
matsuさん。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加