实现ListView控件的行间隔颜色的优化代码

王朝other·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

崔占民在其文章《用代码实现ListView控件的行间隔颜色》中给出了实现代码,经过笔者测试,发现有如下bug:

首先,虽然可以看到背景色间隔,但是条块的高度等于原始picGreenBar的高度。应该在autoredraw属性设置为true之前,将height属性设置为一个最小值,比如1。

另外,listview的属性要修改一下:

...

ListView1.View = lvwReport

ListView1.FullRowSelect = True

ListView1.GridLines = True

picGreenbar.Height = 1

'添加一些实验数据

....

为方便读者,将全部代码公布如下(关键代码来自《用代码实现ListView控件的行间隔颜色》):

--------------------------------

VERSION 5.00

Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"

Begin VB.Form Form1

Caption = "Form1"

ClientHeight = 5400

ClientLeft = 60

ClientTop = 345

ClientWidth = 5940

LinkTopic = "Form1"

ScaleHeight = 5400

ScaleWidth = 5940

StartUpPosition = 3

Begin VB.PictureBox picGreenbar

Height = 1695

Left = 120

ScaleHeight = 1282.353

ScaleMode = 0 'User

ScaleWidth = 4635

TabIndex = 1

Top = 3480

Width = 4695

End

Begin MSComctlLib.ListView ListView1

Height = 3255

Left = 120

TabIndex = 0

Top = 120

Width = 4695

_ExtentX = 8281

_ExtentY = 5741

View = 3

Sorted = -1 'True

LabelWrap = -1 'True

HideSelection = -1 'True

FlatScrollBar = -1 'True

FullRowSelect = -1 'True

GridLines = -1 'True

_Version = 393217

ForeColor = -2147483640

BackColor = -2147483643

BorderStyle = 1

Appearance = 1

NumItems = 0

End

End

Attribute VB_Name = "Form1"

Attribute VB_GlobalNameSpace = False

Attribute VB_Creatable = False

Attribute VB_PredeclaredId = True

Attribute VB_Exposed = False

Option Explicit

Private Sub Form_Load()

Dim j As Integer

Dim itmX As ListItem

ListView1.ColumnHeaders.Add , , "This is Just a Simple Example"

ListView1.ColumnHeaders(1).Width = 3000

ListView1.View = lvwReport

ListView1.FullRowSelect = True

ListView1.GridLines = True

picGreenbar.Height = 1

'添加一些实验数据

For j = 1 To 33

Set itmX = ListView1.ListItems.Add()

itmX.Text = "This is item number " & CStr(j)

Next j

Call ColorListView(Me.ListView1, Me.picGreenbar)

End Sub

Private Sub Form_Resize()

ListView1.Width = Me.ScaleWidth

End Sub

Private Sub ColorListView(ListView1 As ListView, picGreenbar As PictureBox)

Dim i As Integer

Dim iFontHeight As Long

Dim iBarHeight As Integer

Dim ColHead As ColumnHeader

Me.ScaleMode = vbTwips

picGreenbar.ScaleMode = vbTwips

picGreenbar.BorderStyle = vbBSNone

picGreenbar.AutoRedraw = True

picGreenbar.Visible = False

picGreenbar.Font = ListView1.Font

iFontHeight = picGreenbar.TextHeight("b") + Screen.TwipsPerPixelY

iBarHeight = (iFontHeight * 1)

picGreenbar.Width = ListView1.Width

'======

picGreenbar.Height = iBarHeight * 2

picGreenbar.ScaleMode = vbUser

picGreenbar.ScaleHeight = 2

picGreenbar.ScaleWidth = 1

'draw the actual bars

picGreenbar.Line (0, 0)-(1, 1), &HE7E8FC, BF

picGreenbar.Line (0, 1)-(1, 2), RGB(0, 255, 0), BF

'======

ListView1.PictureAlignment = lvwTile

ListView1.Picture = picGreenbar.Image

End Sub

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航