不知道VB的是否支持设置背景颜色,如果不行可能需要自己重绘,或者用Xtreme Suite For ActiveX或者别的套件中的ListView代替了。反正C#可以支持http://stackoverflow.com/questions/5179664/how-to-change-listview-selected-row-backcolor-even-when-focus-on-another-control

解决方案 »

  1.   

    也可以采用嵌入控件的方法。附加控件常态是不可见的。当有选定项目的 ListView 失去焦点时,调整附加控件的坐标,设置显示值,并使其可见。当 ListView 或附加控件得到焦点时,将附加控件重新设置为不可见。敞开思路,实际上可以找到许多解决方案。
      

  2.   

    更改 listview 外观属性,添加 LVS_SHOWSELALWAYS 即可
      

  3.   

    你是没看明白楼主说的是什么吧。
    反正楼主要的效果就是 listview 失去焦点后仍能显示哪个项目被选中
    那既然控件本来就有这个功能的,那为什么还要浪费时间搞其它效果?
    当然如果楼主不满意这个效果,非得自己定制的话,那就自绘咯
      

  4.   

    你说的那个  LVS_SHOWSELALWAYS ,在VB6中设计时就能直接设置属性的。
    但是失去焦点后,它只是用灰色背景显示的选中的项目。
    你说的加上 LVS_SHOWSELALWAYS ,其实也就是这个效果。
    所以我说,你没看明白楼主说的什么。关键问题就是在于“楼主不满意默认的那个效果”啊。
      

  5.   

    LVS_SHOWSELALWAYS 也能通过 API 动态设置。下面是一个例子:
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" 
    (ByVal hwnd As Long, ByVal nIndex As Long) As Long 
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" 
    (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 
    Private Const GWL_STYLE As Long = (-16) 
    Private Const LVS_SHOWSELALWAYS As Long = &H8& Private Sub Form_Click() Dim lStyles As Long 'Get current styles 
    lStyles = GetWindowLong(ListView1.hwnd, GWL_STYLE) If (lStyles And LVS_SHOWSELALWAYS) = LVS_SHOWSELALWAYS Then 
    'Remove the LVS_SHOWSELALWAYS style 
    lStyles = lStyles And Not LVS_SHOWSELALWAYS 
    Else 
    'Add the LVS_SHOWSELALWAYS style 
    lStyles = lStyles Or LVS_SHOWSELALWAYS 
    End If Call SetWindowLong(ListView1.hwnd, GWL_STYLE, lStyles) 
    ListView1.Refresh End Sub Private Sub Form_Load() With ListView1 
    .ListItems.Add , , "Item 1" 
    .ListItems.Add , , "Item 2" 
    .ListItems.Add , , "Item 3" 
    .ListItems.Add , , "Item 4" 
    .ListItems.Add , , "Item 5" 
    End With End Sub 
    不过,加上 LVS_SHOWSELALWAYS 以后,在失去焦点时 ListView 中的选定项是灰秃秃的背景色。如果和 ListBox 放在一起使用,的确很不协调。很久以来,不仅仅 VB,各个使用 ListView 控件的开发平台的使用者,一直在问 ListView 失去焦点如何保持选定项高亮的问题。似乎更多的回应就是自行重绘。
      

  6.   


    那个控件我用过,有BUG的,如果加载行数太多的话,滚动时会出错,像是断行缺字之类的,当初就是因为这个bug放弃了这个控件。
      

  7.   

    又再修改了一下模块,现在山寨得更加像了,支持加了背景图片的listview关键是要用“&H8000000D”这个。一开始用的“&H80000000”山寨得不够像,不过近视的也看不大出来。山寨真是一门高深的学问。
      

  8.   

    CTLIST的滚动条确实有问题。但是功能比这个强大多了。还有,那个滚动条就是两边按钮有问题。新版本马上放出。估计会改很多。