Visual Basic的列表框控件中包含項目的列表,本文介紹如何檢 查列表中項目是否已經存在,以及如何將新的項目添加到列表框控件 中。
使用SendMessage函數搜尋重復的項目
在Visual Basic中開發應用程序時,可以使用列表框控件來創建 一個項目的列表。要將新的項目添加到列表中,可以使用AddItem方法 。該方法不能自動報告在列表框控件中是否有重復的信息存在,所以 必須在將新項目添加到列表之前檢查一下。
使用Windows應用程序編程接口(API)的SendMessage函數可以在 列表框控件中搜尋指定的項目,該函數允許向操作系統中發送消息。 在本文的例子裡,我們讓SendMessage函數往列表框控件中執行一個LB _FINDSTRING消息。
LB_FINDSTRING消息允許在一個列表框控件中搜索同目標字符串 相匹配的項目。該消息的第一個參數是希望進行的搜索類型,須將該 值設為0,表示從列表框控件中的第一個項目開始搜索。第二個參數是 一個字符串,它是實際希望搜索的項目。
如果該LB_FINDSTRING消息返回值-1,則表明在列表框控件中沒有 找到目標字符串,此時可以使用AddItem方法來將新的項目添加到列表 框控件中。如果該項目已經在列表中存在,則可以簡單地顯示一個信 息框或是執行一些其它的過程,來通知用戶列表框控件中已經存在一 個重復的項目。
樣例程序
該程序顯示了如何確定在一個列表框控件中是否已經包含了一個 要添加到該控件中的項目。
1.在Visual Basic中開始一個新的工程,采用缺省的方法建立For m1。
2.將如下常量和聲明語句添加到Form1的通用聲明部分中(注意: 該聲明語句需要書寫在一行內):
Private Declare Function SendMessageFind Lib "user32" Al ias "SendMessage A" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVallP aram As String) As Long Const WM_USER = &H400 Const LB_ERR = (-1) Const LB_FINDSTRING = &H18F
3.將如下代碼添加到Form1的Form_Load事件中:
Private Sub Form_Load() List1.AddItem "Item #1" List1.AddItem "Item #2" List1.AddItem "Item #3" List1.AddItem "Item #4" End Sub
4.在Form1上添加一個文本框控件,采用缺省的方法建立Text1。
5.在Form1上添加一個列表框控件,采用缺省的方法建立List
6.在Form1上添加一個命令按鈕控件,采用缺省的方法建立Comman d1,將Caption屬性設置為"重復"。
7.將如下代碼添加到Command1的單擊事件中:
Private Sub Command1_Click() CheckForDupes End Sub
8.創建一個新的名為CheckForDupes的函數,將如下代碼添加到該 函數中:
Sub CheckForDupes() Dim Ret As Long Dim A As String A = Text1.TEXT Ret = SendMessageFind(List1.hwnd, LB_FINDSTRING, 0, (A)) If Ret = LB_ERR Then List1.AddItem Text1.TEXT Else List1.ListIndex = Ret MsgBox "重復項目-不能被添加到列表框中", 16, "錯誤" End If End Sub
按下F5鍵來執行本程序。列表框控件中有5個項目。在文本框控 件中鍵入一個新的項目,單擊重復命令按鈕。程序將在列表框控件中 搜索剛剛鍵入到文本框控件中的項目,如果該項目未被找到,則程序將 把該項目添加到列表框控件中,如圖1;相反,如果該項目在列表框中已 經存在,則顯示出一個信息框以通知項目已經存在