程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB.NET >> 用VB.NET打造特性化ListBox控件

用VB.NET打造特性化ListBox控件

編輯:VB.NET

用VB.NET打造特性化ListBox控件。本站提示廣大學習愛好者:(用VB.NET打造特性化ListBox控件)文章只能為提供參考,不一定能成為您想要的結果。以下是用VB.NET打造特性化ListBox控件正文


ListBox(列表框)也是日常常常運用和遇到的組件,在Visual Basic .Net中運用的ListBox其實是從.Net FrameWork SDK中的ListBox類經過實例化發生的。.Net FrameWork SDK中的ListBox類所創立的ListBox是最典型的,要想使自己的ListBox異乎尋常就必需編寫相應的代碼,好在.Net FrameWork SDK中的ListBox類為完成特性化的ListBox提供豐厚的、可操作“工具”,這些“工具”就是繪制ListBox的所需求的事情、相關的屬性以及豐厚的繪制辦法。在本文中將引見在ListBox中各個元素的繪制辦法,其中包括繪制各種字體、顏色以及在各項上加上邊框和為各項參加圖片等。上面首先來理解一下.Net FrameWork SDK為在VB.Net中完成手工繪制ListBox提供的“工具”。

一..Net Frame Work SDK 為在VB.Net完成特性化ListBox提供的工具:

1. 屬性:

在缺省狀況下,ListBox是不允許被重繪制的,這是由於ListBox中的“DrawMode”屬性值是“Normal”。此屬性的作用是設定ListBox的繪制形式,“Normal”是枚舉DrawMode中的一個成員。設定為“Normal”意味著ListBox中各個成員都是零碎控制,並且各項大小相等。“DrawMode”屬性在本文中的作用相似與上一文中的“OwnerDraw”屬性。枚舉DrawMode中的其他成員請參閱表01所示:

屬性

闡明

Normal 組件的一切元素都由操作零碎繪制,並且元素大小都相等。 OwnerDrawFixed 組件的一切元素都是手動繪制的,並且元素大小都相等。 OwnerDrawVariable 組件的一切元素都由手動繪制,元素大小能夠不相等。

表01:枚舉DrawMode中的成員及其闡明

本文設定ListBox的“DrawMode”屬性值是“OwnerDrawVariable”。由於本文引見的順序不只繪制ListBox中的各元素,還將設定ListBox中元素的大小。

2. 事情:

在設定“DrawMode”屬性值為“OwnerDrawVariable”後,將會觸發一些用以繪制ListBox的事情,如:DrawItem事情和MeasureItem事情。DrawItem事情次要處置繪制ListBox中的各個元素,MeasureItem事情次要是處置設置ListBox各元素的大小。ListBox中的DrawItem事情和MeasureItem事情和上一節中引見的MenuItem的DrawItem事情和MeasureItem事情是一樣的,辨別接納DrawItemEventArgs參數和MeasureItemEventArgs參數數據,並以此數據來處置。這二個事情的詳細引見請參閱前一節中內容。

3. 繪制圖形的辦法:

在繪制ListBox時所采用的辦法和上一節中也根本相反,獨一不同的是在本文中添加了圖形繪制辦法DrawImage,DrawImage辦法的作用是在指定的地位,以指定圖形的原始大小停止繪制,本文經過DrawImage辦法完成在ListBox各項中添加相應的圖形。

二.設計、調試和運轉環境:

(1).微軟公司視窗2000服務器版。

(2).Visual Studio .Net 2003企業構建版,.Net FrameWork SDK 1.1版本號4322。

三.按部就班繪制自己的ListBox:

首先還是依照以下步驟新建一個Visual Basic .Net項目,並在項目窗體上添加一個ListBox組件:

1. 啟動Visual Studio .Net。

2. 選擇菜單【文件】|【新建】|【項目】後,彈出【新建項目】對話框。

3. 將【項目類型】設置為【Visual Basic項目】。

4. 將【模板】設置為【Windows使用順序】。

5. 在【稱號】文本框中輸出【打造自己的ListBox】。

在【地位】的文本框中輸出【E:VS.NET項目】,然後單擊【確定】按鈕,這樣在“E:VS.NET項目”目錄中就發生了稱號為“打造自己的ListBox”的文件夾,並在外面創立了稱號為“打造自己的ListBox”的項目文件。

6. 把Visual Studio .Net的以後窗口切換到【Form1.vb(設計)】窗口,並從【工具箱】中的【Windows窗體組件】選項卡中往Form1窗體中拖入一個ListBox組件到窗體中。並設定此ListBox組件中參加“aaa”、“bbb”和“ccc”三個項。

至此一個最典型的ListBox就完成了。詳細如圖01所示:

圖01:【打造自己的ListBox】項目設計界面之一

上面就在此ListBox根底上,對其停止改造,參加特性化的東西,首先是對ListBox中的各項的字體、顏色等等停止改造。修正ListBox字體和顏色是經過DrawItem事情來完成的,運用DrawString辦法把指定字體、大小、顏色在指定區域繪制文字。設定ListBox各元素的大小是經過MeasureItem事情完成的。以下是完成上述改造的詳細操作步驟:

1. 設定ListBox組件的“DrawMode”屬性值為“OwnerDrawVariable”。此時會發如今ListBox組件參加的“aaa”、“bbb”和“ccc”三項均不顯示。這是由於當ListBox組件的“DrawMode”屬性值為“OwnerDrawVariable”,繪制ListBox的任務將不在由機器自動完成,而是經過ListBox的DrawItem事情來完成。

2. 把Visual Studio .Net的以後窗口切換到Form1.vb的代碼編輯窗口。

3. 在定義窗體組件的代碼區中添加下列代碼,下列代碼是定義二個數組,此數組的成員辨別是設定ListBox中各項的稱號和定義各項稱號的顏色。

Private sData ( ) As String = {"白色" , "藍色" , "黃色" , "綠色" , "黃綠色" , "灰色"}
 
  '此數組是定義ListBox中各項的稱號
  Private sColorData ( ) As Object = {System.Drawing.Color.Red , System.Drawing.Color.Blue , System.Drawing.Color.Yellow , System.Drawing.Color.Green , System.Drawing.Color.YellowGreen , System.Drawing.Color.SlateGray}
  '此數組是定義各項稱號對應的顏色

4. 在InitializeComponent進程中的代碼後部添加下列代碼,下列代碼是以下面定義的sData數組來設定ListBox的各項稱號:

listBox1.DataSource = sData

5. 在InitializeComponent進程之後添加下列代碼,下列代碼是定義ListBox的DrawItem事情,經過此事情對ListBox中各項停止重新繪制:

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項目稱號
  End Sub

6. 在ListBox的DrawItem事情代碼之後添加下列代碼,下列代碼是定義ListBox的MeasureItem事情,此事情的作用是設定ListBox的各元素的大小:

Private Sub listBox1_MeasureItem ( ByVal sender As Object , ByVal e As System.Windows.Forms.MeasureItemEventArgs ) Handles listBox1.MeasureItem
 
  e.ItemHeight = 25
  End Sub

至此重新繪制的ListBox第一步就完成了,保管上述的修正後,單擊快捷鍵F5,改造後的ListBox如圖02所示:

圖02:【打造自己的ListBox】項目運轉界面之一

上面就要完成為圖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所示:

圖03:【打造自己的ListBox】項目運轉界面之二

四.總結:

經過本文可見,手動繪制Windows窗體組件並不像想像的那麼復雜。由於.Net FrameWork SDK曾經為Visual Basic .Net提供了許多繪制Windows窗體組件的“工具”,只需掌握Windows組件事情的處置進程和正常處置事情接納的參數中的數據,運用各種圖形、圖象的繪制辦法,再加上精心的編排,就根本可以“改造”任何Windows窗體組件。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved