Что нового

[Элементы GUI] Фильтр строк в элементах списков (например ListView)

HukpoFuJl

AццkuЙ HukpoFuJl
Сообщения
97
Репутация
38
Доброго времени суток, собственно в САБЖе указана идея, сейчас опишу подробнее.

Хочу разобрать всё на примере ListView, но если будут предложения более простого решения для других элементов - думаю тоже будет "в тему"...
В общем есть допустим список ListView, в нем что-то вроде прайс-листа, допустим с комповым железом. Есть Input для ввода текста фильтра. Нужно, что бы при вводе текста в поле фильтра в списке скрывались (!) элементы, в которых не содержится введенный текст...


Вот для примера:
Код:
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>

$GUI = GUICreate("Form1", 543, 410, 546, 239)
$lPrice = GUICtrlCreateListView("ID|Name|Price", 8, 40, 522, 358)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 300)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 150)
For $i=1 to 20
	GUICtrlCreateListViewItem($i&"|processor"&$i&" AM"&Random(2,3,1)&"|"&Random(50,150,1), $lPrice)
Next
GUICtrlCreateLabel("Filter:", 8, 10, 29, 17)
$iFilter = GUICtrlCreateInput("AM3", 40, 8, 489, 21)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
Нужно, что бы при вводе "AM3" оставались только процы АМ3, а при вводе "AM2" оставались процы АМ2...

Теоретическое решение: При вводе текста пробегаться по элементам и скрывать/отображать те, которые не соответствуют/соответствуют введенному тексту...

Единственное не знаю как "скрыть" и "отобразить" элемент.
Ну и постоянный перебор списка при вводе может "подгружать" прогу, если список большой. (как вариант в таких случаях сделать фильтрацию по кнопке)
 
Автор
HukpoFuJl

HukpoFuJl

AццkuЙ HukpoFuJl
Сообщения
97
Репутация
38
Немного погуглив понял, что такая реализация, как "скрытие" и "отображение" элементов в списке (ListView) невозможна по принципу и не только в autoit'e... Хотя надежда на гуру всё ещё остается :smile:

Альтернативный вариант: Создать невидимый (0px x 0px) ListView и переносить туда "неактивные" элементы.

Реализовывать такую "альтернативу" пока не буду, хочу услышать мнение наших гуру :smile: может есть путь проще...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 702
Все данные хранишь в 2-D массиве, а в ListView отображаешь только то, что нужно.
 
Верх