加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net 中给ListView 添加进度条

发布时间:2020-12-16 23:26:40 所属栏目:大数据 来源:网络整理
导读:'-------------------------------------------------- ' ' 窗体 - 带进度条的 ListView ' ' namespace: WoodCoal.Library.Windows.Forms.ListViewProgress ' author: 木炭(WoodCoal) ' homepage: http://www.woodcoal.cn/ ' memo: 带进度条的 ListView ' re

'--------------------------------------------------
'
' 窗体 - 带进度条的 ListView
'
' namespace: WoodCoal.Library.Windows.Forms.ListViewProgress
' author: 木炭(WoodCoal)
' homepage: http://www.woodcoal.cn/
' memo: 带进度条的 ListView
' release: 2009-06-04
'
'--------------------------------------------------

Namespace Windows.Forms
Public Class ListViewProgress
Inherits System.Windows.Forms.ListView

''' <summary>进度条内容</summary>
Private _ProgressText As String

''' <summary>进度条背景色</summary>
Private _ProgressBackColor As Drawing.Color

''' <summary>进度条文字色</summary>
Private _ProgressTextColor As Drawing.Color

''' <summary>进度条的序列</summary>
Private _ProgressColumnIndex As Integer = -1

'----------------------------------------------------------------

Public Sub New()
Me.Name = "ProgressListView"
Me.ProgressBackColor = Drawing.Color.YellowGreen
Me.ProgressTextColor = MyBase.ForeColor

MyBase.OwnerDraw = True
End Sub


'----------------------------------------------------------------

''' <summary>进度条背景色</summary>
Public Property ProgressBackColor() As Drawing.Color
Get
Return _ProgressBackColor
End Get
Set(ByVal value As Drawing.Color)
_ProgressBackColor = value
End Set
End Property

''' <summary>进度条文字色</summary>
Public Property ProgressTextColor() As Drawing.Color
Get
Return _ProgressTextColor
End Get
Set(ByVal value As Drawing.Color)
_ProgressTextColor = value
End Set
End Property

''' <summary>进度条的序列</summary>
Public Property ProgressColumnIndex() As Integer
Get
Return _ProgressColumnIndex
End Get
Set(ByVal value As Integer)
_ProgressColumnIndex = value
End Set
End Property

'----------------------------------------------------------------

Protected Overloads Overrides Sub OnDrawColumnHeader(ByVal e As

System.Windows.Forms.DrawListViewColumnHeaderEventArgs)
e.DrawDefault = True
MyBase.OnDrawColumnHeader(e)
End Sub

Protected Overloads Overrides Sub OnDrawSubItem(ByVal e As

System.Windows.Forms.DrawListViewSubItemEventArgs)
If e.ColumnIndex = Me.ProgressColumnIndex Then
'画进度条
Dim ProgressGraphics As Drawing.Graphics = e.Graphics
Dim ProgressRect As New Drawing.Rectangle(e.Bounds.Left,e.Bounds.Top,e.Bounds.Width,

e.Bounds.Height)

If ProgressRect.Height > 6 AndAlso ProgressRect.Width > 6 Then
'调整为新的区域,以便产生一定的间距
ProgressRect = New Drawing.Rectangle(ProgressRect.Left + 2,ProgressRect.Top + 2,

ProgressRect.Width - 5,ProgressRect.Height - 5)

Dim Percent As Single = 0
If Common.String.Validate.Number(e.SubItem.Text) Then
Percent = Single.Parse(e.SubItem.Text)
If Percent >= 1.0F Then Percent = Percent / 100.0F
End If

'外框
ProgressGraphics.FillRectangle(Drawing.Brushes.White,ProgressRect)
ProgressGraphics.DrawRectangle(New Drawing.Pen(e.SubItem.ForeColor),ProgressRect)

'内容
Dim ProgressContentRect As New Drawing.Rectangle(ProgressRect.Left + 1,ProgressRect.Top + 1,

CInt((ProgressRect.Width * Percent)) - 1,ProgressRect.Height - 1)
ProgressGraphics.FillRectangle(New Drawing.SolidBrush(_ProgressBackColor),

ProgressContentRect)

'输出文字
If e.SubItem.Font.Height < ProgressRect.Height Then
ProgressRect = New Drawing.Rectangle(ProgressRect.Left,ProgressRect.Top - Int(-

(ProgressRect.Height - e.SubItem.Font.Height) / 2),ProgressRect.Width,e.SubItem.Font.Height)
Else
ProgressRect = New Drawing.Rectangle(ProgressRect.Left + 1,

ProgressRect.Width - 1,ProgressRect.Height - 1)
End If
Using StringFormat As New Drawing.StringFormat
StringFormat.Alignment = Drawing.StringAlignment.Center
StringFormat.LineAlignment = Drawing.StringAlignment.Center
StringFormat.Trimming = Drawing.StringTrimming.EllipsisCharacter

e.Graphics.DrawString(Percent.ToString("p1"),e.SubItem.Font,New

System.Drawing.SolidBrush(Me.ProgressTextColor),ProgressRect,StringFormat)
End Using
End If

MyBase.OnDrawSubItem(e)
Else
e.DrawDefault = True
MyBase.OnDrawSubItem(e)
End If
End Sub
End Class
End Namespace

原文来源:“激情燃烧的木炭” http://www.woodcoal.cn/
原文标题:<SPAN style="color:#FF0000">带进度条的ListView,在SubItem中显示Progress</SPAN> - Visual Basic[激情燃烧的

木炭]
原文地址:http://www.woodcoal.cn/technology/visual-basic/200964-23510-781.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读