ListView durchsuchen
-
Ich versuche gerade mich Listview zu durchsuchen. Ich hab es schon mit LVM_FINDITEM versucht:
LVFINDINFO st; st.flags = LVFI_STRING; st.psz = L"Feuerwehr"; st.vkDirection = VK_DOWN; SendMessage(hListView,LVM_FINDITEM,-1,(LPARAM)&st);aber das klappt nicht. Ich bin auch nicht ganz sicher ob das die richtige Funktion ist? Ich will z.B alle Zeilen in denen "Feuerwehr" vorkommt markiert haben..
Mfg Tim
-
Fatal Error appears schrieb:
Ich will z.B alle Zeilen in denen "Feuerwehr" vorkommt markiert haben..
LVM_FINDITEM
wParam = (WPARAM) (int) iStart;
lParam = (LPARAM) (const LPLVFINDINFO) plvfi;Searches for a list view item with the specified characteristics. You can send this message explicitly or by using the ListView_FindItem macro.
Returns the index of the item if successful, or -1 otherwise.
iStart
Index of the item to begin the search with or -1 to start from the beginning. The specified item is itself excluded from the search.
plvfi
Address of an LVFINDINFO structure that contains information about what to search for.Also du musst dir schon im Klaren sein, dass der String exakt Übereinstimmen muss. Wenn eine Übereinstimmung gefunden wird erhälst du den Index des Listviewitems zurück. Dem verpasst du dann die Selectionmark. Wichtig wenn du mehrere Items auswählen möchtest darf der Listview den Style "LVS_SINGLESEL" nicht aufweisen. Den ganzen Vorgang wiederholst du halt so oft bis du -1 zurück erhälst.
-
ich krieg immer -1... obwohl Feuerwehr zu 100% vorkommt. Ich hab en ListView mit mehreren Colums vielleicht liegts daran.
LVFINDINFO st; st.flags = LVFI_STRING; st.psz = L"Feuerwehr"; st.vkDirection = VK_DOWN; c = SendMessage(hListView,LVM_FINDITEM,1,(LPARAM)&st); wchar_t test; _itow(c,&test,10); MessageBox(hWnd,&test,NULL,MB_YESNO); ListView_SetItemState(hListView,c,LVIS_SELECTED,LVIS_STATEIMAGEMASK);
-
Hmm, das weiss ich jetzt auch net, aber vieleicht kannst du "ListView_GetItemText(..)" benutzten und den Listview, von Hand durch rattern. Also so würde ich es machen, wenn ich in der MSDN nichts passendes finde. einfach 2 for-schleifen eine wird mit Anzahl der Columns durchlaufen die andere mit Anzahl der Zeilen.
-
FindItem sucht nur in der ersten Spalte. Übrigens solltest Du bei LVM_FINDITEM für die Suche vom ersten Eintrag an den Wert -1 angeben. In Deinem Fall wird nämlich erst ab dem dritten Eintrag gesucht.
-
sri schrieb:
FindItem sucht nur in der ersten Spalte. Übrigens solltest Du bei LVM_FINDITEM für die Suche vom ersten Eintrag an den Wert -1 angeben. In Deinem Fall wird nämlich erst ab dem dritten Eintrag gesucht.
Ok FindItem funktioniert jetzt. Aber gibt es auch eine möglichkeit alle spalten zu durchsuchen?
-
Naja, sind den deine Daten nur im Listview enthalten? Die fallen doch nicht vom Himmel, wenn du z.B. den Ursprung deiner Daten in einer Struktur-Array abspeicherst und den Items in Spallte 0 als lParam den Index oder auch die Adresse der Stuktur übergibst, dann ist es doch ganz einfach. Also ich würde die Daten in einem Struktur-Array speichern und in Echtzeit per LVN_GETDISPINFO ausgeben.