当前位置:编程学习 > VB >>

listview控件失去焦点就看不到蓝色高亮条,怎么用代码控制?

为什么listbox的蓝色条可以常亮,但listview就不可以?这样常常搞得用户不知道自己选择了哪个项目,除了设成灰色背景这种投机的做法外,怎样实现listview失去焦点时仍像listbox一样有高亮条? 不知道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 VB.NET也可以支持。 自绘,除此之外似乎没有办法 也可以采用嵌入控件的方法。

附加控件常态是不可见的。当有选定项目的 ListView 失去焦点时,调整附加控件的坐标,设置显示值,并使其可见。

当 ListView 或附加控件得到焦点时,将附加控件重新设置为不可见。

敞开思路,实际上可以找到许多解决方案。 选中的用不一样的图标 更改 listview 外观属性,添加 LVS_SHOWSELALWAYS 即可 为毛要搞得想楼上说的那么复杂呢?
难道都没有了解基础控件的属性设置的?
引用 7 楼 Sandrer 的回复:
为毛要搞得想楼上说的那么复杂呢?
难道都没有了解基础控件的属性设置的?

你是没看明白楼主说的是什么吧。
引用 8 楼 Chen8013 的回复:
Quote: 引用 7 楼 Sandrer 的回复:

为毛要搞得想楼上说的那么复杂呢?
难道都没有了解基础控件的属性设置的?

你是没看明白楼主说的是什么吧。


反正楼主要的效果就是 listview 失去焦点后仍能显示哪个项目被选中
那既然控件本来就有这个功能的,那为什么还要浪费时间搞其它效果?
当然如果楼主不满意这个效果,非得自己定制的话,那就自绘咯 你说的那个  LVS_SHOWSELALWAYS ,在VB6中设计时就能直接设置属性的。
但是失去焦点后,它只是用灰色背景显示的选中的项目。
你说的加上 LVS_SHOWSELALWAYS ,其实也就是这个效果。
所以我说,你没看明白楼主说的什么。

关键问题就是在于“楼主不满意默认的那个效果”啊。
楼主这叫多此一举 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 失去焦点如何保持选定项高亮的问题。似乎更多的回应就是自行重绘。 推荐ctlist
引用 13 楼 XinJW 的回复:
推荐ctlist


那个控件我用过,有BUG的,如果加载行数太多的话,滚动时会出错,像是断行缺字之类的,当初就是因为这个bug放弃了这个控件。
后来还是画一个蓝色的长条盖住它了事算了,很简单的,盖住后再把那一行的文字颜色设成白色用于反白,就跟高亮一样了




焦点无论是在按纽还是在文本框里打字,都高亮了哟,噢耶 好多高手参与讨论,只有学习的份 又再修改了一下模块,现在山寨得更加像了,支持加了背景图片的listview



关键是要用“&H8000000D”这个。一开始用的“&H80000000”山寨得不够像,不过近视的也看不大出来。山寨真是一门高深的学问。
补充:VB ,  控件
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,