您可以在这里快速查找:


 
您的位置: 编程学习 > asp.net教程 > 200601
文章分类

Java技术
2005: 03 04 05 06 07 08
09 10 11 12
2006: 01 02

Asp.net
2005: 07 08 09 10 11 12
2006: 01 02

VB编程
2006: 02

Asp编程
2005: 11 12
2006: 01 02

C++/VC
2005: 10 11 12
2006: 01 02

Delphi
2005: 12
2006: 01 02

其它

 本文章适合所有读者

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

bsmagic

崔占民在其文章《用代码实现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