Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

listview控件能否实现隔行变色

小魏  发表于:2009-12-08 21:18:04  
复制

我想用LISTVIEW控件来显示数据,我想实现这个控件的数据可以隔行变色.

不知如何实现?

 

我目前的方法:

Dim i As Single
For i = 2 To Me.ListView1.ListItems.Count - 1
   ListView1.ListItems(i).ForeColor = IIf(i Mod 2 = 0, vbRed, vbBlue)
Next

但是这个方法只能将第一列的颜色改掉,不能实现整行变色.

不知是否有哪个办法可以解决这个问题?请高人指点呀

 

Top
小魏 发表于:2009-12-08 21:20:32

在网上找了个例子,

但是我用这个例子在AC中调试,却不能行.

我也贴出来,请高人一并看看.


Private Sub Form_Load()
  Dim i As Integer

  Dim j As Integer
  Dim itmX As ListItem
  Dim ColHead As ColumnHeader
  ListView1.ColumnHeaders.Add , , "This is vb ListView"
  ListView1.ColumnHeaders(1).Width = 3000


  For j = 1 To 20
    Set itmX = ListView1.ListItems.Add()
    itmX.Text = "Number" & CStr(j)
  Next j

  Call ListViewColor(Me, ListView1)
End Sub

Public Function ListViewColor(ByRef frmName As Form, ByRef ListName As ListView, _
                             Optional N1Color As Long = &HFFFFFF, _
                             Optional N2Color As Long = &HFFC0C0) As Long
On Error GoTo errorHand
    Dim iHeight As Double
    Dim iNull As Boolean
    Dim itmX As ListItem
    Dim PicName As PictureBox
    Set PicName = frmName.Controls.Add("vb.PictureBox", "Neshcy", frmName)
    If ListName.ListItems.Count <= 0 Then
        Set itmX = ListName.ListItems.Add()
        itmX.Text = "test........"
        iNull = True
    End If
    With PicName
        .AutoRedraw = True
        .ScaleMode = vbTwips
        .Font = ListName.Font
        .BorderStyle = 1
        .Appearance = 0
        iHeight = ListName.ListItems(1).Height
        .Height = iHeight * 2 + 30
    End With
    With ListName
        PicName.Line (0, 0)-(.Width, iHeight), N1Color, BF
        PicName.Line (0, iHeight)-(.Width, iHeight * 2), N2Color, BF
        .PictureAlignment = lvwTile
        .Picture = PicName.Image
        If iNull = True Then
            .ListItems.Clear
        End If
    End With
    frmName.ScaleMode = vbTwips
errorHand:
    Exit Function
End Function 


ListViewColor函数解说:
frmName  要执行的窗体(frm)名称
ListName 要执行的ListView名称
N1Color  第一条可选颜色值;如果变动请在Optional N1Color As Long = &HFFFFFF 其中的&HFFFFFF改为什么`自己喜欢就改什么
N2Color  第二条可选颜色值;如果变动请在Optional N2Color As Long = &HFFC0C0 其中的&HFFC0C0改为什么`自己喜欢就改什么



andymark 发表于:2009-12-09 20:08:18

可以的

 

Dim i As Single
For i = 2 To Me.ListView1.ListItems.Count - 1
   ListView1.ListItems(i).ForeColor = IIf(i Mod 2 = 0, vbRed, vbBlue)
Next

 

上面的语句只针对某一行的隔列变色

 

 

你需要循环读取

 

 

do while not rs.eof

 

.......

 

if K MOD 2 =0 THEN

 

   这里才加入整行变色的语句

   for i=1 to xx

    itmX.ListSubItems.Item(I).ForeColor = vbRed

    next

end if

 

rs.move

 

loop

 

 

上面的只是思路,需要自行修改

 

 

 



小魏 发表于:2009-12-10 21:21:48

倒是实现了文字的隔行变色,

我把修改后的代码也贴出来,这个调试通过了.

Dim j As Integer
Dim i As Single
For i = 2 To Me.ListView1.ListItems.Count - 1
   ListView1.ListItems(i).ForeColor = IIf(i Mod 2 = 0, vbRed, vbBlue)
   ListView1.ListItems(i).Bold = True '粗体
   For j = 1 To Me.ListView1.ColumnHeaders.Count - 1
      ListView1.ListItems(i).ListSubItems.Item(j).ForeColor = IIf(i Mod 2 = 0, vbRed, vbBlue)   'ForeColor
   Next
Next

 

只是不能实现背景色的改变.



欢欢 发表于:2009-12-11 07:52:54

把附件传上来看看



总记录:4篇  页次:1/1 9 1 :