こんにちわ。
ご存知の方がいたら、おしえてください。
現在 VB.NET2005 XP の環境です。
Listview内で、データ(ADDしたデータ)のない行を
マウスでクリックすると
青反転が消えてしまうのですが、
どこかでListView内のデータがない行を
マウスでクリックしても無視するという設定ができるのでしょうか?
ちなみにListView1.HideSelection = False は設定してます。
宜しくお願いします。
すいません。
もう少し現状を追加します。
やりたい事は、常に青反転の状態にしたいです。
ListView以外をクリックするとグレーになるのは問題ないです。
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
特攻隊長まるるうさん。
お返事ありがとうございます。
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ではありませんが、
このロジックで判定は何とかできています。
やはり上記でも青反転は消えてしまいます。
他に何か考えられる原因があるのでしょうか?
もし何かご存知でしたら、教えてください。
宜しくお願いします。
リストビューの内部処理を常識的に類推すると、
・マウスのクリック検地
・クリック位置のアイテム判定
・選択アイテムの変更
…といった感じでしょうから
>・マウスのクリック検地
・選択行を強制
>・クリック位置のアイテム判定
>・選択アイテムの変更
…という処理を入れても、その後の処理はブロックされないのでは?
テストしたいなら SelectedIndexChanged イベントあたりにログを
出力するコードを入れておいて、選択行がどう変化しているか?を
調べてみては?
…どうすれば解決するか…は、ちょっと思いつきません。というか…いまいちな
方法しか…
案1.タイマーでイベント処理の後からイベントを起こす。
案2.リストビューの Enabled を変更してみる(未検証。うまくいけばその後の
処理がブロックされる場合がありますw)
案3.リストビューを継承して ListView.WndProc メソッドから Windows Message
をブロックしてみる(話が長くなるww)
うーん。他の方の書込みに期待しましょう(滅
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
返事が遅くなり、すいませんでした。
matsuさんのMouseUpイベントで、うまくいきました。
本当に助かりました。
特攻隊長まるるうさん。
matsuさん。
ありがとうございました。
ツイート | ![]() |