_GUICtrlListView_FindInText
搜索包含指定文本的项目_GUICtrlListView_FindInText
参数
$hWnd 控件句柄
$sText 匹配文本
$iStart 开始进行搜索的项目索引(基于 0 ) 或者设置为 -1 从开始进行搜索. 指定项目排除在搜索之外..
$fWrapOK 如果为真, 且未找到匹配项, 搜索将从第一项继续
$fReverse 如果为真, 搜索将从 $iStart - 1 开始到 0. 如果 $fWrapOK = True 搜索将继续
这个函数查找‘a’的时候会匹配‘a’‘ab’‘abc’
怎样让它全字匹配:比如查找‘a’就匹配‘a’查找‘abc’就匹配‘abc’? 本帖最后由 ceoguang 于 2011-2-27 00:31 编辑
本来查找ListView关键字就是完全匹配的,具体请查看LVM_GETITEMTEXT 消息
_GUICtrlListView_FindInText只是一个封装好的UDF,而不是内置函数.
原理是枚举所有Item,通过发送LVM_GETITEMTEXT消息来取字符.
Func _GUICtrlListView_FindInText($hWnd, $sText, $iStart = -1, $fWrapOK = True, $fReverse = False)
Local $iCount = _GUICtrlListView_GetItemCount($hWnd)
Local $iColumns = _GUICtrlListView_GetColumnCount($hWnd)
If $iColumns = 0 Then $iColumns = 1
If $fReverse And $iStart = -1 Then Return -1
Local $sList
If $fReverse Then
For $iI = $iStart - 1 To 0 Step -1
For $iJ = 0 To $iColumns - 1
$sList = _GUICtrlListView_GetItemText($hWnd, $iI, $iJ)
If StringInStr($sList, $sText) Then Return $iI
Next
Next
Else
For $iI = $iStart + 1 To $iCount - 1
For $iJ = 0 To $iColumns - 1
$sList = _GUICtrlListView_GetItemText($hWnd, $iI, $iJ)
If StringInStr($sList, $sText) Then Return $iI
Next
Next
EndIf
If (($iStart = -1) Or Not $fWrapOK) And Not $fReverse Then Return -1
If $fReverse And $fWrapOK Then
For $iI = $iCount - 1 To $iStart + 1 Step -1
For $iJ = 0 To $iColumns - 1
$sList = _GUICtrlListView_GetItemText($hWnd, $iI, $iJ)
If StringInStr($sList, $sText) Then Return $iI
Next
Next
Else
For $iI = 0 To $iStart - 1
For $iJ = 0 To $iColumns - 1
$sList = _GUICtrlListView_GetItemText($hWnd, $iI, $iJ)
If StringInStr($sList, $sText) Then Return $iI
Next
Next
EndIf
Return -1
EndFunc ;==>_GUICtrlListView_FindInText
看到没有?
将里面的StringInStr($sList, $sText)改为$sList==$sText就能达到了你的要求了. 回复 2# ceoguang
$sList==$sText?不明白
麻烦你说得清楚一些,谢谢? 版主说得不能再清楚了。照着改一下,该函数就变成一个符合你要求的函数了。 版主说得不能再清楚了。照着改一下,该函数就变成一个符合你要求的函数了。
页:
[1]