Что нового

Автоматическое удаление отметок в чекбоксах соседних подпунктов TreeView

joiner

Модератор
Локальный модератор
Сообщения
3 009
Репутация
502
На официальном форуме нашел UDF для работы с TreeWiew - GUITreeViewEx
для моего проекта не хватает функции, которая бы автоматически удаляла отметку в чекбоксах подпунктов одного пункта . Ну, как это работает в отношении радио кнопок . Может быть выбрана только одна.
Английским не владею. Попытался использовать машинный перевод, но ясно дело, меня не поняли :smile:
Может ли кто-нибудь помочь и оставить запрос на функцию в теме на форуме?
А может быть, у кого то есть наработка ?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
joiner,
Нашел у себя в коллекции, может, Вам поможет.


Добавлено:
Сообщение автоматически объединено:

Добавил в архив немного переделанный пример.
(Поменять в предыдущем сообщении архив не смог. Теперь, при попытке что-либо прикрепить, я могу только удалить вложение, которого нет. Чистка кеша не помогла.) :stars:
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3 009
Репутация
502
Вобщем, как мне кажется, я решил задачу. Написал дополнительную функцию
Код:
Func _OnlyOne();joiner
	Local $hTV = $g_GTVEx_aTVData[0][1]
	Local $checkselect = _GUICtrlTreeView_GetSelection($hTV)
	If Not $checkselect Then Return
	Local $gettext = _GUICtrlTreeView_GetText($hTV, $checkselect)
	Local $check = _GUICtrlTreeView_GetChecked($hTV, $checkselect)
	If $check Then
		If Not StringCompare($flagcheck, $gettext) Then Return
		Local $parentcheck = _GUICtrlTreeView_GetParentHandle($hTV, $checkselect)
		Local $textparent = _GUICtrlTreeView_GetText($hTV, $parentcheck)
		Local $textchild, $Child
		For $i = 1 To UBound($aNamesUnCheck) - 1
			If Not StringCompare($textparent, $aNamesUnCheck[$i]) Then
				$Child = _GUICtrlTreeView_GetFirstChild($hTV, $parentcheck)
				While 1
					$textchild = _GUICtrlTreeView_GetText($hTV, $Child)
					If StringCompare($gettext, $textchild) Then _GUICtrlTreeView_SetChecked($hTV, $Child, False)
					$Child = _GUICtrlTreeView_GetNextChild($hTV, $Child)
					If $Child = 0 Then ExitLoop 2
				WEnd
			EndIf
		Next
		$flagcheck = $gettext
	Else
		$flagcheck = 0
	EndIf
EndFunc   ;==>_OnlyOne
Пришлось кое-что добавить в UDF. Совсем мелочи. Но, на мой взгляд, сейчас стало удобнее.
Функция находится в коде примера.
Чего добился?
Можно выбранным пунктам ( у которых два и более подпункта) назначит выбор только одного пункта. В других пунктах выбор будет обычный.
Так же пункт назначенные на "выбрать что-то одно" можно вернуть к исходному состоянию, когда для выбора доступны все подпункты в любом сочетании.
так же дополнительно - сохранение настроек в файл. в UDF уже была функция сохранения в строку. в моем примере сохраняется не только вид TreeView, но и назначенные пункты, в которых доступен для выбора только один подпункт. Выложу на официальном форуме. Может быть автор все оптимизирует и добавит в свою библиотеку
одно небольшое условие - для установки значения "выбрать можно что-то одно" можно выбирать пункт в котором только один уровень подпунктов. пока не думал как решить задачу с многоуровневыми подпунктами
примеры и библиотека во вложении
 

Вложения

Верх