示例
列表框的特點是:列表框中的項目是通過程式插入到其中的,用戶無法向清單中輸入數據,當選擇其中的項目,並在用戶單擊一個按鈕或者執行某個操作時,由應用程式完成對指定項目的具體操作。下面這個例子充分說明了列表框的這個特點,並介紹了列表框(ListBox)的常用屬性。
為了學習方便,提供的源碼已經作了詳細的中文注釋,看看源碼框中的代碼:
Option Explicit
' 簡單的列表框ListBox的例子
'------名稱-------------作用------------
' List1、List2 列表框
' LefttoRightCmd 移動所選項目到另一個列表框(左到右)
' RighttoLeftCmd 移動所選項目到另一個列表框(右到左)
' LefttoRightCmd 移動所選項目到另一個列表框(左到右)
' RighttoLeftCmd 移動所選項目到另一個列表框(右到左)
' List1.deleteString 刪除列表框List1中所選項目
' List2.deleteString 刪除列表框List2中所選項目
' List1.AddString 給列表框List1增加新項目
' List2.AddString給列表框List2增加新項目
' List1.ResetContent清空列表框List1
' List2.ResetContent 清空列表框List2
'————名稱————屬性設定———
' List1列表框 Sorted屬性設為“False”
' List2列表框 Sorted屬性設為“True”
' MultiSelect屬性設定為2
' 即List2控制項中的項目總是排序的
'--------------------------------------
Private Sub Form_Load()
'裝載窗體時,給列表中的元素賦值
List1.AddItem “China”
List1.AddItem “America”
List1.AddItem “Japan”
List2.AddItem “Soccer”
List2.AddItem “Tennis”
List2.AddItem “Basketball”
End Sub
Private Sub LefttoRightCmd_Click()
'將左邊列表中所選元素移動到右邊列表中
If List1.ListIndex >;= 0 Then
'在右邊列表中增加新元素
List2.AddItem List1.Text
'刪除左邊列表中的所選元素
List1.RemoveItem List1.ListIndex
End If
End Sub
Private Sub List1AddCmd_Click()
Dim ListItem As String
'
ListItem = InputBox(“在列表中輸入新項目”)
'向列表中加入新項目
If Trim(ListItem) <;>; ““ Then
'Trim()作用是清除ListItem字元串內的空格
List1.AddItem ListItem
End If
End Sub
Private Sub List1ClearCmd_Click()
'清空列表
List1.Clear
End Sub
Private Sub List1MoveCmd_Click()
Dim i As Integer
'判斷列表框是否只有一個項目被選中
If List1.SelCount = 1 Then
List1.RemoveItem List1.ListIndex
ElseIf List1.ListCount >; 1 Then
'刪除列表框中的所選中的多個項目
For i = List1.ListCount - 1 To 0 Step -1
'ListCount返回列表框中的項目總數
'ListCount-1是列表框中最後一個項目的索引號
'判斷該項目是否被選中,Selected()返回布爾值
If List1.Selected(i) Then
'刪除索引號為i的項目
List1.RemoveItem i
End If
Next
End If
End Sub
Private Sub List2AddCmd_Click()
'定義變數,以接收輸入的字元串
Dim ListItem As String
ListItem = InputBox(”在列表中輸入新項目“)
If Trim(ListItem) <;>; ““ Then
'將字元串增加到列表中
List2.AddItem ListItem
End If
End Sub
Private Sub List2ClearCmd_Click()
'清空列表
List2.Clear
End Sub
Private Sub List2MoveCmd_Click()
Dim i As Integer
'判斷所選 元素是否只有一個
If List2.SelCount = 1 Then
List2.RemoveItem List2.ListIndex
'如果所選 元素大於1,則按下列操作進行
ElseIf List2.ListCount >; 1 Then
For i = List2.ListCount - 1 To 0 Step -1
If List2.Selected(i) Then
List2.RemoveItem i
End If
Next i
End If
End Sub
Private Sub RighttoLeftCmd_Click()
Dim i As Integer
'判斷選中的元素有幾個
If List2.SelCount = 1 Then
List1.AddItem List2.Text
List2.RemoveItem List2.ListIndex
'當選中的元素大於一個時
ElseIf List2.SelCount >; 1 Then
For i = List2.ListCount - 1 To 0 Step -1
'如果該元素被選中,則將其從右邊移至左邊
If List2.Selected(i) Then
List1.AddItem List2.List(i)
List2.RemoveItem i
End If
Next i
End If
End Sub
這個例子包含一個窗體,窗體中有兩個列表框(List1、List2)和八個按鈕,界面如下:
(圖)窗體(FormListBox)
我們首先新建一個標準的EXE工程,添加一個窗體,並把列表框和按鈕控制項添加到窗體上。各按鈕控制項的名稱如下表:
按鈕名稱 名稱屬性 按鈕名稱 名稱屬性
刪除所選項目(左) List1movecmd 刪除所選項目(右) List2movecmd
增加新項目(左) List1addcmd 增加新項目(右) List2addcmd
清除弄表(左) List1clearcmd 清除列表(右) List2clearcmd
右箭頭 lefttorightcmd 左箭頭 Righttoleftcmd
' List1列表框 Sorted屬性設為“False” ' List2列表框 Sorted屬性設為“True” ' MultiSelect屬性設定為2 ' 即List2控制項中的項目總是排序的
在屬性視窗中,將List1列表框 Sorted屬性設為“False”;List2列表框 Sorted屬性設為“True”,MultiSelect屬性設定為2,即List2控制項中的項目總是排序的。
下一步我們為各控制項添加相應的程式。
其中:
List1.AddItem “China” 是將“China”添加到列表框中。
List1.ListIndex 返回的是列表框List1中當前選擇項目的索引號碼。
List1.ListCount 返回的是列表框List1中項目總數。
List1.ListCount - 1 返回列表框List1中最後一個項目的索引號。
List1.Selected() 返回的是一個項目的選擇狀態,返回的是布爾值。
代碼寫好之後,我們就可以保存工程,然後按“Ctrl+F5”鍵,測試檢驗一下我們的程式了。在這個小程式中,包含了列表框中的一般常用屬性和方法。
控制項
Visual Basic 提供了列表框控制項(ListBox)以供用戶進行多個項目的選擇。在工具箱面板上,列表框控制項的圖示如圖一所示:
圖一
默認的列表框控制項名為 ListX(X為阿拉伯數字 1、2、3,等等),規則的命名方式為:LstX(X為用戶自定義的名字,如 LstName、LstUser,等等)。
一、列表框控制項的主要屬性:
列表框中可以有多個項目供選擇,用戶通過單擊某一項選擇自己所需要的項目,如果項目太多,超出了列表框設計時的長度,則自動增加豎向滾動條,如圖二:
圖二
除了一些常見的諸如 Font 、Height、Left、Width、Enabled、Name 等屬性外,列表框還有一些特殊的屬性:
1、List(列表)屬性:
List 是列表框最重要的屬性之一,其作用是羅列或設定表項中的內容。可以在界面設定時直接輸入內容,如圖三:
圖三
在程式運行時,列表框中所有的選項,都可以通過 List(下標值) 的形式表示。比如列表框中的第一項,用 List(0)表示,列表框中的第二項,用 List(1)表示,列表框中的第十項,用 List(9)表示,以此類推。
大家注意,列表框中的第一項,是 List(0) ,而不是 List(1) 。
<1>、List() 屬性的使用是非常靈活的,比如我們要從如圖二的列表框(Lst1)中取出第三項內容,可以用下面的代碼做到:A$ = Lst1.List(2)
其中,A 是一個變數;$ 指明了這個變數的類型:字元串型;這句話的意思是:將 Lst1 列表框中第三項(List(2))取出來然後賦值給字元串變數 A 。
象上面這種賦值辦法,在 VB 中是非常普遍的,又如以前我們學到的:
LblShow.Caption = “Visual Basic”,這句話是指將 Visual Basic 這個字元串賦值給 LblShow 標籤控制項並作為其標題。
緊接上面的內容,假設我們用一個標籤顯示出剛才取出的表項:
LblShow.Caption = A$
那么顯示的結果正是我們取出的選項。
可見,取出某個列表框中的某一表項並將其賦值給某個變數,代碼如下:
字元串變數= 列表框名稱.List(X) ,其中,X 是下標。
<2>、通過 List() 改變原有表項:假設我們要將如圖二的列表框中第三項內容改為“跟我學 VB”,只需輸入下面的代碼即可:
Lst1.List(2) = “跟我學 VB”
上句話的意思是將“跟我學 VB”字元串賦值給 Lst1 並作為其第三項的內容。
結果如圖四:
圖四
可見,要修改某個列表框中某一選項:
列表框名稱.List(X) = “欲修改成的內容” ,其中,X 是下標。
2、ListCount 屬性:
本屬性返回列表框表項數量的數值,只能在程式運行時起作用。比如:一個有著四種選項的列表框,那么 ListCount 就為 4 ;一個列表框有五個選項,那么 ListCount 就為 5 。
返回一個列表框的表項數量值並將其賦值給某個變數,代碼如下:
數值型變數 = 列表框名稱.ListCount
比如要返回圖二列表框的 ListCount:
X% = Lst1.ListCount ,其中,X 是變數,% 表示X是整數類型的變數。
3、ListIndex(索引)屬性:
本屬性用來返回或設定控制項中當前選擇項目的索引號,只能在程式運行時使用。第一個選項的索引號是 0 ,第二個選項的索引號是 1 ,第三個選項的索引號是 2 ,依此類推,ListCount 始終比最大的 ListIndex 值大 1 。當列表框沒有選擇項目時, ListIndex 值為 -1 。
在程式中設定 ListIndex 後,被選中的項目呈反相顯示,如圖五:
圖五
在列表框控制項的所有屬性中,本屬性是非常重要的,因為一個列表,事先你並不知道用戶將要選擇哪一條項目,這時,只有根據 ListIndex 返回的數值,我們才能讓程式針對用戶的選擇做出適當的反應。
返回 ListIndex 的代碼如下:
X% = 列表框名稱.ListIndex
聯想:根據前面的知識我們知道,要取出第三項內容,代碼如下:
A$ = Lst1.List(2)
假設現在選中的是第三項,但我們事先不知道用戶要選擇這一項,那么又應該如何訪問這第三項呢?
代碼如下:A$ = Lst1.List(Lst1.ListIndex) 此時,Lst1.ListIndex 等同於 2 。
仔細想一想,為何要如此書寫?
4、Columns(列)屬性:
本屬性用來確定列表框的列數,當值為 0 時,所有項目呈單列顯示;當值為 1 或者大於 1 ,項目呈多列顯示。Columns 屬性只能在界面設定時指定。如圖六:
圖六
默認狀態時,如果項目的總高度大於列表框的高度,那么列表框右邊會自動增加一個垂直滾動條,用來上下移動列表框。
5、MultiSelect(多重選擇)屬性:
本屬性決定了選項框中的內容是否可以進行多重選擇,只能在界面設定時指定,程式運行時不能予以修改。如圖七:
圖七
MultiSelect 共有三個值:0 ,不允許多項選擇,如果選擇了一項就不能選擇其他項;1 ,允許多重選擇,但功能不如 2 ,可以用滑鼠或空格選擇;2 ,功能最強大的多重選擇,可以結合 Shift 鍵或 Ctrl 鍵完成多個表項的多重選擇。方法是:單擊所要選擇的範圍的第一項,然後按住 Shift 鍵,再單擊選擇範圍最後一項。
6、Style(類型)屬性:
本屬性決定了列表框的外觀,共有兩個值:1 ,Standard ,即為標準型,如圖八:
圖八
2 ,CheckBox ,複選框型,如圖九:
圖九
本屬性只能在界面設定時確定。
7、Selected(選中)屬性:
本屬性返回或設定在列表框控制項中某項目是否選中的狀態。選中時,值為 True ;未被選中,值為 False 。
代碼規則如下: 列表框名稱.Selected(索引值) = True/False
注意,索引號其實是項目的下標值,如果是第三項,那么索引值是 2 ,如果是第十項,那么索引值是 9 ,以此類推。
例一:
有如圖十這樣一個應用程式:
圖十
列表框(LstName)中是人物的名稱,用戶選擇不同的名字,下面的標籤(LblShow)自動顯示此人的相關信息。
原始碼如下:
Private Sub LstName_Click()
If LstName.Selected(0) = True Then
LblShow.Caption = “馬拉多納是阿根廷的球星”
ElseIf LstName.Selected(1) = True Then
LblShow.Caption = “貝肯鮑爾是德國的球星”
ElseIf LstName.Selected(2) = True Then
LblShow.Caption = “羅納爾多是巴西的球星”
Else
LblShow.Caption = “貝克漢姆是英國的球星”
End If
End Sub
本程式是根據用戶選擇的不同,在標籤按件中顯示不同的信息;另外,我們用到了前面學到的 If ···Then··· ElseIf··· End If 語法。
8、SelCount(選中項目數量):
只有當 MultiSelect 屬性值為 1 或 2 時,本屬性才起作用,用來讀取列表框中所選項目的數目,通常與 Selected 一起使用,以處理控制項中的所選項目。
二、列表框控制項的主要事件:
列表框控制項主要接收 Click 與 DblClick ,如例一。
三、列表框控制項的方法:
1、增加項目:AddItem
用 AddItem 可以為列表框增加項目,代碼規則如下:
列表框名稱.AddItem 欲增項目[,索引值]
其中,索引值是可選項,是指欲增項目放到原列表框中的第幾項,如放在第三項,那么索引值是 2 ,放在第五項,索引值則是 4 。
假設我們要在如圖十這樣的程式中增加項目:LstName.AddItem “郝海東”,4
2、清除所有:Clear
用 Clear 可以清除列表框中所有的內容,代碼如下:
列表框名稱.Clear
3、刪除選項:RemoveItem
此方法可以刪除列表框中指定的項目,代碼如下:
列表框名稱.RemoveItem 索引值
其中,索引值是必須的,表示欲刪除哪一個項目。
同樣如圖十的程式,假設我們要刪除第三個項目,代碼如下:
LstName.RemoveItem 2
聯想:對於任意一個列表框,要刪除已經選中的項目,代碼如下:
列表框名稱.RemoveItem 列表框名稱.ListIndex
比如:LstName.RemoveItem LstName.ListIndex
列表框控制項在工具箱上的基礎控制項。很多第三方控制項也對列表框做出了擴充,提供了更多地功能,以滿足不同的需求。只要將dll添加到工具箱就可以使用。