FindItem 方法示例
本示例将 Biblio.mdb 数据库中 Publishers 表的内容植入 ListView 控件中。同时也将 FindItem 方法的三个选项植入 ComboBox 控件。一个 CommandButton 包含 FindItem 方法的代码;单击按钮后将提示输入欲搜索的字符串,然后使用 FindItem 方法在 ListView 控件中搜索此字符串。如找到字符串则使用 EnsureVisible 方法滚动控件以显示找到的 ListItem 对象。要试用此例,请将 ListView、ComboBox 及 CommandButton 控件放置在窗体上,并将代码粘贴到窗体的声明部分。运行示例并单击命令按钮。注意 必须使用“工具”菜单的“引用”命令添加 Microsoft DAO 3.0 对象库的引用,否则示例无法运行。Private Sub Form_Load()
'为 ColumnHeader 对象创建对象变量。
Dim clmX As ColumnHeader
'添加 ColumnHeaders。列宽度等于控件宽度
'除以 ColumnHeader 对象的数目。
Set clmX = ListView1.ColumnHeaders. _
Add(, , "Company", ListView1.Width / 3)
Set clmX = ListView1.ColumnHeaders. _
Add(, , "Address", ListView1.Width / 3)
Set clmX = ListView1.ColumnHeaders. _
Add(, , "Phone", ListView1.Width / 3)
ListView1.BorderStyle = ccFixedSingle '设置 BorderStyle 属性。
ListView1.View = lvwReport '设置 View 属性为报表型。
Command1.Caption = "&FindItem"
'用 FindItem 选项标注 OptionButton 控件。
Option1(0).Caption = "Text"
Option1(1).Caption = "SubItem"
Option1(2).Caption = "Tag"
ListView1.FindItem = 0 '设置 ListView 控件的 FindItem 属性为文本。
End With
'将数据库记录植入 ListView 控件。
'为数据访问对象创建对象变量。
Dim myDb As Database, myRs As Recordset
'设置数据库为 BIBLIO.MDB 数据库。
Set myDb = DBEngine.Workspaces(0).OpenDatabase("BIBLIO.MDB")
'设置 recordset 为 Publishers 表。
Set myRs = myDb.OpenRecordset("Publishers", dbOpenDynaset)
'若当前记录不是最后一条记录,则添加 ListItem 对象。
'使用新对象的引用设置属性。
'设置 Text 属性为 Name 字段 (myRS!Name)。
'设置 SubItem(1) 为 Address 字段 (myRS!Address)。
'设置 SubItem(7) 为 Phone 字段 (myRS!Telephone)。 While Not myRs.EOF
Dim itmX As ListItem 'ListItem 变量。
Dim intCount As Integer '计数器变量。
'使用 Add 方法添加新的 ListItem 并为新引用设置对象。
'使用引用设置
'属性。
Set itmX = ListView1.ListItems.Add(, , CStr(myRs!Name))
intCount = intCount + 1 'Tag 属性计数器递增。
itmX.Tag = "ListItem " & intCount '用计数器值设置 Tag。 '若 Address 字段不为空,则设置 subitem 1 为此字段。
If Not IsNull(myRs!Address) Then
itmX.SubItems(1) = CStr(myRs!Address) 'Address 字段。
End If
'若 Phone 字段不为空,则设置 subitem 2 为此字段。
If Not IsNull(myRs!Telephone) Then
itmX.SubItems(2) = myRs!Telephone 'Phone 字段。
End If
myRs.MoveNext '移动到下一条记录。
Wend
End SubPrivate Sub Command1_Click()
'FindItem 方法。
'创建名为 intSelectedOption 的整数类型变量
'来存储选定按钮的索引。
'创建名为 strFindMe 的字符串变量。使用 InputBox
'把查找的字符串存储在变量中。使用
' FindItem 方法查找字符串。使用 Option1
'切换决定在何处查找的 FindItem 参数。
Dim intSelectedOption as Integer
Dim strFindMe As String
If Option1(0).Value = True then
strFindMe = InputBox("Find in " & Option1(0).Caption)
intSelectedOption = lvwText
End If
If Option1(1).Value = True then
strFindMe = InputBox("Find in " & Option1(1).Caption)
intSelectedOption = lvwSubItem
End If
If Option1(2).Value = True then
strFindMe = InputBox("Find in " & Option1(2).Caption)
intSelectedOption = lvwTag
End If 'FindItem 方法返回找到的项目的引用,所以
'必须创建对象变量并将
'找到的项目设置给它。
Dim itmFound As ListItem 'FoundItem 变量。
Set itmFound = ListView1. _
FindItem(strFindMe, intSelectedOption, , lvwPartial)
'若未找到符合条件的 ListItem 则通知用户并退出。如果
'找到 ListItem,则使用 EnsureVisible 方法滚动控件,
'并选定 ListItem。
If itmFound Is Nothing Then '若没有匹配成功,则通知用户并退出。
MsgBox "No match found"
Exit Sub
Else
itmFound.EnsureVisible '滚动 ListView 以显示找到的 ListItem。
itmFound.Selected = True '选定ListItem。
'将焦点返回给控件以查看选择。
ListView1.SetFocus
End If
End SubPrivate Sub ListView1_LostFocus()
'控件失去焦点后,重新将每个
' ListItem 的 Selected 属性设置为 False。
Dim i As Integer
For i = 1 to ListView1.ListItems.Count
ListView1.ListItems.Item(i).Selected = False
Next i
End Sub
本示例将 Biblio.mdb 数据库中 Publishers 表的内容植入 ListView 控件中。同时也将 FindItem 方法的三个选项植入 ComboBox 控件。一个 CommandButton 包含 FindItem 方法的代码;单击按钮后将提示输入欲搜索的字符串,然后使用 FindItem 方法在 ListView 控件中搜索此字符串。如找到字符串则使用 EnsureVisible 方法滚动控件以显示找到的 ListItem 对象。要试用此例,请将 ListView、ComboBox 及 CommandButton 控件放置在窗体上,并将代码粘贴到窗体的声明部分。运行示例并单击命令按钮。注意 必须使用“工具”菜单的“引用”命令添加 Microsoft DAO 3.0 对象库的引用,否则示例无法运行。Private Sub Form_Load()
'为 ColumnHeader 对象创建对象变量。
Dim clmX As ColumnHeader
'添加 ColumnHeaders。列宽度等于控件宽度
'除以 ColumnHeader 对象的数目。
Set clmX = ListView1.ColumnHeaders. _
Add(, , "Company", ListView1.Width / 3)
Set clmX = ListView1.ColumnHeaders. _
Add(, , "Address", ListView1.Width / 3)
Set clmX = ListView1.ColumnHeaders. _
Add(, , "Phone", ListView1.Width / 3)
ListView1.BorderStyle = ccFixedSingle '设置 BorderStyle 属性。
ListView1.View = lvwReport '设置 View 属性为报表型。
Command1.Caption = "&FindItem"
'用 FindItem 选项标注 OptionButton 控件。
Option1(0).Caption = "Text"
Option1(1).Caption = "SubItem"
Option1(2).Caption = "Tag"
ListView1.FindItem = 0 '设置 ListView 控件的 FindItem 属性为文本。
End With
'将数据库记录植入 ListView 控件。
'为数据访问对象创建对象变量。
Dim myDb As Database, myRs As Recordset
'设置数据库为 BIBLIO.MDB 数据库。
Set myDb = DBEngine.Workspaces(0).OpenDatabase("BIBLIO.MDB")
'设置 recordset 为 Publishers 表。
Set myRs = myDb.OpenRecordset("Publishers", dbOpenDynaset)
'若当前记录不是最后一条记录,则添加 ListItem 对象。
'使用新对象的引用设置属性。
'设置 Text 属性为 Name 字段 (myRS!Name)。
'设置 SubItem(1) 为 Address 字段 (myRS!Address)。
'设置 SubItem(7) 为 Phone 字段 (myRS!Telephone)。 While Not myRs.EOF
Dim itmX As ListItem 'ListItem 变量。
Dim intCount As Integer '计数器变量。
'使用 Add 方法添加新的 ListItem 并为新引用设置对象。
'使用引用设置
'属性。
Set itmX = ListView1.ListItems.Add(, , CStr(myRs!Name))
intCount = intCount + 1 'Tag 属性计数器递增。
itmX.Tag = "ListItem " & intCount '用计数器值设置 Tag。 '若 Address 字段不为空,则设置 subitem 1 为此字段。
If Not IsNull(myRs!Address) Then
itmX.SubItems(1) = CStr(myRs!Address) 'Address 字段。
End If
'若 Phone 字段不为空,则设置 subitem 2 为此字段。
If Not IsNull(myRs!Telephone) Then
itmX.SubItems(2) = myRs!Telephone 'Phone 字段。
End If
myRs.MoveNext '移动到下一条记录。
Wend
End SubPrivate Sub Command1_Click()
'FindItem 方法。
'创建名为 intSelectedOption 的整数类型变量
'来存储选定按钮的索引。
'创建名为 strFindMe 的字符串变量。使用 InputBox
'把查找的字符串存储在变量中。使用
' FindItem 方法查找字符串。使用 Option1
'切换决定在何处查找的 FindItem 参数。
Dim intSelectedOption as Integer
Dim strFindMe As String
If Option1(0).Value = True then
strFindMe = InputBox("Find in " & Option1(0).Caption)
intSelectedOption = lvwText
End If
If Option1(1).Value = True then
strFindMe = InputBox("Find in " & Option1(1).Caption)
intSelectedOption = lvwSubItem
End If
If Option1(2).Value = True then
strFindMe = InputBox("Find in " & Option1(2).Caption)
intSelectedOption = lvwTag
End If 'FindItem 方法返回找到的项目的引用,所以
'必须创建对象变量并将
'找到的项目设置给它。
Dim itmFound As ListItem 'FoundItem 变量。
Set itmFound = ListView1. _
FindItem(strFindMe, intSelectedOption, , lvwPartial)
'若未找到符合条件的 ListItem 则通知用户并退出。如果
'找到 ListItem,则使用 EnsureVisible 方法滚动控件,
'并选定 ListItem。
If itmFound Is Nothing Then '若没有匹配成功,则通知用户并退出。
MsgBox "No match found"
Exit Sub
Else
itmFound.EnsureVisible '滚动 ListView 以显示找到的 ListItem。
itmFound.Selected = True '选定ListItem。
'将焦点返回给控件以查看选择。
ListView1.SetFocus
End If
End SubPrivate Sub ListView1_LostFocus()
'控件失去焦点后,重新将每个
' ListItem 的 Selected 属性设置为 False。
Dim i As Integer
For i = 1 to ListView1.ListItems.Count
ListView1.ListItems.Item(i).Selected = False
Next i
End Sub
要查找的数据在SubItems(1)Dim li As ListItem
Dim MID as String
MID = "23" Set li = Lv.FindItem(MID, 1, , lvwPartial)
If li Is Nothing Then
MsgBox "没找到.", 64, Me.Caption
Else
li.Selected = True
li.EnsureVisible
End If
End If
这个方法包括4个参数: string、value、index、match。参数string包含你要搜索的字符串;而参数value(在智能提示中为'where')告诉VB在哪里搜索指定的字符串--在Text (lvwText)、subitems (lvwSubItem)或Tag (lvwTag)属性中。 参数index表示VB从哪个条目开始进行搜索,而参数match告诉VB是否搜索整个字符串(lvwWholeWord)或部分匹配(lvwPartial)。参数string是唯一必须的参数。而我的程序执行不成功,是否是我的Microsoft Windows Common Controls 6.0不是升级版本的缘故?如果那位能执行成功,请把控件的版本编号告诉我,谢谢
就算用TOP命令,可是还是不太好,客户只是想找找看,如果一找反而看不到别的数据如果FindItem 能成功,最好,如果不能,我会考虑各位所说的,谢谢