中国石凳联盟 登录注册

[.net]ListView失去焦点仍然高亮的办法

rockage··0 回复·238 浏览

发表回复
本帖最后由 rockage 于 2017-1-17 00:09 编辑

方法1:
这个小功能原装的ListView控件原本就是支持的,即将属性HideSelection设置为False即可。
这样,在ListView失去焦点的时候,最后点击行仍然会以浅灰色标记出。

方法2:
方法1不太显眼,如果希望达到平时点击时那种高亮的效果,则需要做一些小改动,网上有很多这样的例子,
但是都很复杂,甚至动用了重绘。下面介绍这个方法则非常简单:

首先要将上面提到那个属性HideSelection设为True,否则仍然还是浅灰色。然后再设置一个全局变量:
Private last_Selected_Item As New ListViewItem


然后在ListView的Click事件中添加:
    Private Sub ListView1_Click(sender As Object, e As EventArgs) Handles ListView1.Click
        last_Selected_Item = ListView1.SelectedItems(0)
    End Sub



然后修改两个事件GotFocus和LostFocus(即获取焦点和失去焦点)
    Private Sub ListView1_GotFocus(sender As Object, e As EventArgs) Handles ListView1.GotFocus
        If IsNothing(last_Selected_Item) = False Then
            last_Selected_Item.ForeColor = Color.Black
            last_Selected_Item.BackColor = Color.White
        End If
    End Sub

    Private Sub ListView1_LostFocus(sender As Object, e As EventArgs) Handles ListView1.LostFocus
        If IsNothing(ListView1.SelectedIndices) <> True And
            ListView1.SelectedIndices.Count > 0 Then
ListView1.SelectedItems(0).ForeColor = Color.White
            ListView1.SelectedItems(0).BackColor = SystemColors.Highlight
        End If
    End Sub



逻辑简单明了,很好地解决了问题!



点赞0 收藏
发表回复
发表回复