Что нового

Как получить значение из GUICtrlCreateListViewItem

VladUs

Скриптер
Сообщения
621
Репутация
181
Дано: код

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Gui = GUICreate("Test",300,450,Default,Default,$GUI_SS_DEFAULT_GUI)
$GuiListView = GUICtrlCreateListView ("№1|№2|№3 ",5,5,250,350)
$Button = GUICtrlCreateButton("Test",20,380,120,30)
GUISetState()

For $i = 1 to 15
GUICtrlCreateListViewItem($i & "|" & $i*2 & "|" & $i*4,$GuiListView)
Next

$msg = GUIGetMsg()

While $msg <> $GUI_EVENT_CLOSE
	$msg = GUIGetMsg()
	Select
	Case $msg  = $Button
		$Ret = GUICtrlRead (GUICtrlRead($GuiListView))
		MsgBox(1,"",$Ret)
	EndSelect
	
WEnd


Условие:
Выделяем строку из таблицы мышкой. Жмем кнопку "Test".
Возвращаются все значения из строки.

Задача:
Необходимо чтобы возвращалась не вся строка, а допустим, значение в столбце №3.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <GUIListView.au3>

...

		Case $msg  = $Button
			$iIndex = _GUICtrlListView_GetSelectedIndices($GuiListView)
			$Ret = _GUICtrlListView_GetItemText($GuiListView, Number($iIndex), 2)
			MsgBox(1,"",$Ret)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Или так:

Код:
Case $msg  = $Button
			$Ret = ControlListView($Gui, "", $GuiListView, "GetText", ControlListView($Gui, "", $GuiListView, "GetSelected"), 2)
			MsgBox(1,"",$Ret)


И ещё вариант:

Код:
Case $msg  = $Button
			$Ret = StringRegExpReplace(GUICtrlRead(GUICtrlRead($GuiListView)), ".*\|(.*)\|$", "\1")
			MsgBox(1,"",$Ret)
 
Автор
V

VladUs

Скриптер
Сообщения
621
Репутация
181
Благодарю CreatoR. Даже не знаю какой способ лучше... :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
VladUs [?]
Даже не знаю какой способ лучше
Добавил ещё один :laugh:

Все одинаково надёжные (вроде бы), но первый самый “корректный”. Хотя по сути второй это тоже самое.
 
Автор
V

VladUs

Скриптер
Сообщения
621
Репутация
181
Второй лучше тем, что не надо подключать дополнительных библиотечек, как в первом.
Третий ... это уже перебор (там в регулярные выражения въезжать надо ), но все равно спасибо.
P.S Остался последний способ через WinApi. :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
А я привык уже через GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") с ListView общаться. ИМХО, очень удобно. В справке это все есть.
 
Автор
V

VladUs

Скриптер
Сообщения
621
Репутация
181
madmasles [?]
А я привык уже через GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") с ListView общаться. ИМХО, очень удобно. В справке это все есть.
Пример... На основе представленном в теме...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
VladUs [?]
Второй лучше тем, что не надо подключать дополнительных библиотечек, как в первом.
Это не всегда лучше, если потребуется серъёзная работа с ListView, без библиотеки будет сложно обойтись.

Остался последний способ через WinApi
Первый способ это и есть WinAPI ;)

madmasles [?]
я привык уже через GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") с ListView общаться
В данном случае оно не поможет, задача заключается в том чтобы получить значение ячейки при нажатий на кнопку.
 
Верх