不知道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
解决方案 »
- 如何让ComboBox控件响应MouseDownMouseUp 事件
- vb +ado+sql数据库编程请教?????
- vb应用程序可以调用vc下编的dll吗?
- 请问如何用代码创建一个ACCESS数据库,并使之有first,last,num三个字段,每个字段的数据类型分别是日期、日期、数字,并加有密码。
- 关于MsFlexGrid里的数据导到Excel里的问题!急
- 如何用dao访问foxpro数据库?(vb6)
- 哪位朋友给介绍一下stream对象?
- 怎么判断某个路径是否有指定的文件?
- 高手能进来吗?
- zilong问:如何用VB打开某个程序后,当这个程序关闭后VB能够收到消息或是能够进行相应的善后处理
- VB中总出现至少一个参数值没有被指定
- dim a as string*16 如何去掉空格
反正楼主要的效果就是 listview 失去焦点后仍能显示哪个项目被选中
那既然控件本来就有这个功能的,那为什么还要浪费时间搞其它效果?
当然如果楼主不满意这个效果,非得自己定制的话,那就自绘咯
但是失去焦点后,它只是用灰色背景显示的选中的项目。
你说的加上 LVS_SHOWSELALWAYS ,其实也就是这个效果。
所以我说,你没看明白楼主说的什么。关键问题就是在于“楼主不满意默认的那个效果”啊。
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 失去焦点如何保持选定项高亮的问题。似乎更多的回应就是自行重绘。
那个控件我用过,有BUG的,如果加载行数太多的话,滚动时会出错,像是断行缺字之类的,当初就是因为这个bug放弃了这个控件。