科技时代新浪首页 > 科技时代 > > 正文

Visual Basic.NET打造个性化ListBox控件(3)


http://www.sina.com.cn 2004年10月19日 10:15 天极yesky

  文/马金虎

  

下面就要实现为图02中的每一项加入一个图片,加入图片的是通过DrawImage方法

  在各项的指定位置绘制相应的图象,所以首先要确定上述六项对应的图象图片所在的位置,方便起见,这六个图片文件都和此项目编译后的文件在同一目录。名称分别为“fileOpen.bmp”、“exit.bmp”、“close.bmp”、“about.bmp”、“about.bmp”和“network.bmp”。下面步骤就是在上述基础上为各项加入图片:

  1. 在定义窗体组件的代码区中再添加下列代码,下列代码是定义六个Bitmap对象:

Dim img_fileopen , img_exit , img_close , img_security , img_network , img_about As Bitmap

  2. 在InitializeComponent过程中的代码后部添加下列代码,下列代码是初始化上面创建的Bitmap对象:

'运行程序前确认在文件当前目录存在以下六个BMP文件
img_fileopen = New Bitmap ( "fileOpen.bmp" )
img_exit = New Bitmap ( "exit.bmp" )
img_close = New Bitmap ( "close.bmp" )
img_about = New Bitmap ( "about.bmp" )
img_security = New Bitmap ( "about.bmp" )
img_network = New Bitmap ( "network.bmp" )

  3. 用下列代码替换Form1.vb中的ListBox1的DrawItem事件对应的代码,下列代码是重新定义ListBox1的DrawItem事件,其中增加了为ListBox1中各项添加图片的功能:

Private Sub listBox1_DrawItem ( ByVal sender As Object , ByVal e As System.Windows.Forms.DrawItemEventArgs ) Handles listBox1.DrawItem
 Dim datas As String ( ) = sData
 Dim rc As RectangleF = New RectangleF ( e.Bounds.X + 1 , e.Bounds.Y + 1 , e.Bounds.Width - 5 ,  e.Bounds.Height - 3 )
 Dim rc1 As Rectangle = New Rectangle ( e.Bounds.X + 1 , e.Bounds.Y + 1 , e.Bounds.Width - 5 , e.Bounds.Height - 3 )
 e.DrawBackground ( )
 '在选定项目上绘制选定背景色
 'e.DrawFocusRectangle ( )
 Dim sf As StringFormat = New StringFormat ( )
 sf.Alignment = StringAlignment.Center
 '设定ListBox中项目名称的在矩形区域的排列对齐方式
 e.Graphics.DrawRectangle ( New Pen ( New SolidBrush ( System.Drawing.Color.Black ) , 1 ) , rc1 )
 '以线条粗度为1,黑色画笔对绘制ListBox中的每一个项目的边框
 e.Graphics.DrawString ( sData ( e.Index ) , New Font ( FontFamily.GenericSansSerif , 14 , FontStyle.Bold ) , New SolidBrush ( sColorData ( e.Index ) ) , rc , sf )
 ' 以指定的字体大小、类型、颜色绘制ListBox项目名称
 Dim useImage As Image = Nothing
 '创建、初始化一个Image实例
 '以下是代码是在ListBox上绘制图片
 If ( datas ( e.Index ) = "红色" ) Then
  useImage = img_fileopen
 End If
 If ( datas ( e.Index ) = "蓝色" ) Then
  useImage = img_close
 End If
 If ( datas ( e.Index ) = "黄色" ) Then
  useImage = img_exit
 End If
 If ( datas ( e.Index ) = "绿色" ) Then
  useImage = img_security
 End If
 If ( datas ( e.Index ) = "黄绿色" ) Then
  useImage = img_network
 End If
 If ( datas ( e.Index ) = "灰色" ) Then
  useImage = img_about
 End If

 If ( useImage Is Nothing ) = False Then
  Dim sz As SizeF = New SizeF
  sz = useImage.PhysicalDimension ( )
  '获取此Image实例的宽度和高度。
  e.Graphics.DrawImage ( useImage , e.Bounds.X + 5 , CInt ( ( e.Bounds.Bottom + e.Bounds.Top ) / 2 - sz.Height / 2 ) )
  '在制定的位置按照原始大小绘制图片
 End If
End Sub

  保存上述步骤后,单击快捷键F5,本文绘制后的ListBox如图03所示:

VisualBasic.NET打造个性化ListBox控件(3)
图03:【打造自己的ListBox】项目运行界面之二

  四.总结:

  通过本文可见,手动绘制Windows窗体组件并不像想像的那么复杂。由于.Net FrameWork SDK已经为Visual Basic .Net提供了许多绘制Windows窗体组件的“工具”,只要掌握Windows组件事件的处理过程和正常处理事件接收的参数中的数据,运用各种图形、图象的绘制方法,再加上精心的编排,就基本能够“改造”任何Windows窗体组件。

[上一页]  [1]  [2]  [3]


  点击此处查询全部Visual Basic新闻


评论】【推荐】【 】【打印】【下载点点通】【关闭
 

 
新 闻 查 询
关键词一
关键词二



彩 信 专 题
迷你小熊
强烈推荐火线下载
动画梁祝
中国神话爱情故事
孙燕姿
我要的幸福、遇见
 
 



科技时代意见反馈留言板 电话:010-82628888-5488   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2004 SINA Inc. All Rights Reserved

版权所有 新浪网