Что нового

Как кликнуть (выделить) пункт в TreeView

pvnn

Осваивающий
Сообщения
305
Репутация
32
Функция
Код:
_GUICtrlTreeView_ClickItem()
не выделяет пункт TreeView. Даже курсор мыши можно переместить, но выделения не происходит

Аналогичный подход, функция
Код:
_GUICtrlTreeView_SetState($hTreeView,$ID,$TVIS_SELECTED)
выделяет пункт, но как-то не корректно.
Пункт становится не в фокусе

При проверке выделенного пункта Button1
Функция GUICtrlTreeView_GetSelection() не видит программно выделенный пункт
Если же я выделяю пункт вручную мышкой, то Функция UICtrlTreeView_GetSelection() отрабатывает корректно

Как правильно выделять пункты в TreeView?


Код:
; AutoIt Version: 3.3.8.1

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTreeView.au3>

$iStyle=BitOR($TVS_HASBUTTONS,$TVS_HASLINES,$TVS_LINESATROOT,$TVS_DISABLEDRAGDROP,$TVS_SHOWSELALWAYS)


$Form1 = GUICreate("Form1", 400, 436, 123, 130)
$hTreeView =_GUICtrlTreeView_Create($Form1,8, 8, 225, 433,$iStyle)
$Button1 = GUICtrlCreateButton("Button1", 240, 104, 75, 25)

$test=_GUICtrlTreeView_Add($hTreeView,0,'Parent')
_GUICtrlTreeView_AddFirst($hTreeView,0,'Parent First')
_GUICtrlTreeView_AddChild($hTreeView,$test,'str1')
_GUICtrlTreeView_AddChild($hTreeView,$test,'str2')
_GUICtrlTreeView_Expand($hTreeView,$test)  ; Развернуть пункт

 ; Поиск
 $ID=_GUICtrlTreeView_FindItemEx($hTreeView,'Parent|str2',0)
_GUICtrlTreeView_ClickItem($hTreeView,$ID,'left','True',1)
_GUICtrlTreeView_SetState($hTreeView,$ID,$TVIS_SELECTED)


$TreeView1=GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			 $Element=_GUICtrlTreeView_GetSelection($hTreeView)
		     MsgBox(64,'Path',_GUICtrlTreeView_GetTree($hTreeView,$Element)) ; Путь к пункту через разделители |
	EndSwitch
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>

$iStyle = BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)

$hForm1 = GUICreate("Form1", 400, 436, 123, 130)
$hTreeView = _GUICtrlTreeView_Create($hForm1, 8, 8, 225, 420, $iStyle, $WS_EX_CLIENTEDGE)
$iButton1 = GUICtrlCreateButton("Button1", 240, 104, 75, 25)

$hItem1 = _GUICtrlTreeView_Add($hTreeView, 0, 'Parent')
_GUICtrlTreeView_AddFirst($hTreeView, 0, 'Parent First')
_GUICtrlTreeView_AddChild($hTreeView, $hItem1, 'str1')
_GUICtrlTreeView_AddChild($hTreeView, $hItem1, 'str2')
_GUICtrlTreeView_Expand($hTreeView, $hItem1) ; Развернуть пункт

; Поиск
$hID = _GUICtrlTreeView_FindItemEx($hTreeView, 'Parent|str2', 0)
_GUICtrlTreeView_SelectItem($hTreeView, $hID, $TVGN_CARET)

GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $iButton1
			$hItem = _GUICtrlTreeView_GetSelection($hTreeView)
			MsgBox(64, 'Path', _GUICtrlTreeView_GetTree($hTreeView, $hItem)) ; Путь к пункту через разделители |
	EndSwitch
WEnd
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
AZJIO Спасибо за _GUICtrlTreeView_SelectItem()

Проблема решена
 
Верх