- Offizieller Beitrag
Edit 12.02.08: Angepaßt an Ver. 3.2.10.0 und erweitert
Mit der neuen Funktion: _GUICtrlListView_FindInText() werden jetzt auch SubItems durchsucht, aber ausschließlich Case insensitiv. Auch eine Teilsuche ist nicht möglich. Aus diesem Grund habe ich meine Funktion entsprechend erweitert.
• Suche in allen Subitems
• Suche Case sensitiv (Standard) oder nicht
• Teilsuche möglich (Standard False), dabei wird Case sensitiv auf False gesetzt, selbst wenn True übergeben
• Rückgabe als Array: Array[0] = ItemIndex, Array[1] = SubItemIndex
Beispiel
#include <GUIConstants.au3>
#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)
$Form1 = GUICreate("Form1", 633, 454, 193, 115)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$b = GUICtrlCreateButton('Suche', 10, 10, 80, 20)
GUICtrlSetOnEvent(-1, '_search')
$in = GUICtrlCreateInput('Wert 4-2', 100, 10, 80, 20)
$ListView1 = GUICtrlCreateListView("Spalte1|Spalte2|Spalte3", 80, 56, 457, 337)
GUICtrlSendMsg(-1, 0x101E, 0, 100)
GUICtrlSendMsg(-1, 0x101E, 1, 100)
GUICtrlSendMsg(-1, 0x101E, 2, 100)
For $i = 1 To 10
_GUICtrlListView_AddItem($ListView1, "Wert " & $i & '-1')
For $k = 2 To 3
_GUICtrlListView_AddSubItem($ListView1, $i-1, "Wert " & $i & '-' & $k, $k-1)
Next
Next
GUISetState(@SW_SHOW)
While 1
Sleep(100)
WEnd
Func Form1Close()
Exit
EndFunc
Func _search()
$ret = _LV_Search($ListView1, GUICtrlRead($in), False, True)
If IsArray($ret) Then
_GUICtrlListView_SetItemSelected($ListView1, $ret[0])
_GUICtrlListView_SetSelectedColumn($ListView1, $ret[1])
MsgBox(0, 'Suche: ' & GUICtrlRead($in), 'Zeile: ' & $ret[0]+1 & @LF & 'Spalte: ' & $ret[1]+1 )
Else
MsgBox(0, '', 'Keine Übereinstimmung')
EndIf
EndFunc
Func _LV_Search($LV, $What2Find, $CaseSens=True, $Partial=False)
$count = _GUICtrlListView_GetItemCount($LV)
Local $aOut[2] = [-1,0]
If $count < 1 Then
SetError(1)
Return -1
EndIf
If $Partial Then $CaseSens = False
$countSub = _GUICtrlListView_GetColumnCount($LV)
For $i = 0 To $count-1
For $k = 0 To $countSub-1
If $CaseSens Then
If _GUICtrlListView_GetItemText($LV, $i, $k) == $What2Find Then
$aOut[0] = $i
$aOut[1] = $k
Return $aOut
EndIf
Else
If Not $Partial Then
If _GUICtrlListView_GetItemText($LV, $i, $k) = $What2Find Then
$aOut[0] = $i
$aOut[1] = $k
Return $aOut
EndIf
Else
If StringInStr(_GUICtrlListView_GetItemText($LV, $i, $k), $What2Find, 1) Then
$aOut[0] = $i
$aOut[1] = $k
Return $aOut
EndIf
EndIf
EndIf
Next
Next
SetError(2)
Return -1
EndFunc ;==>_LV_Search