Что нового

[Ошибки] Не выводятся повторяющиеся элементы в ListBox

alex33

Скриптер
Сообщения
1,457
Репутация
186
Вот заметил такую ошибку, если в список созданный через GUICtrlCreateList добавить два или более одинаковых элемента показываться будет только один, из-за этого сбивается счётчик индексов и нарушается логика...
Наглядный пример:

Код:
#include <Array.au3> ; for _ArrayDisplay
#include <GUIConstants.au3>
#include <ListBoxConstants.au3>
#include <GUIListBox.au3>
$title = @ScriptName
$gui = GUICreate($title, 500, 300, 60, 60)
$label1 = GUICtrlCreateLabel("test list", 10, 10, 100, 30)
$list1 = GUICtrlCreateList("", 10, 50, 200, 130)
$aListData = StringSplit("A|B|C|D|D|E|F|F|F|F|G|H", "|", 2)
;_ArrayDisplay($aListData, "Data preview")
For $i = 0 To UBound($aListData) - 1
	ConsoleWrite('$aListData[' & $i & '] = "' & $aListData[$i] & '"' & @CRLF)
	GUICtrlSetData($list1, $aListData[$i])
Next
$label2 = GUICtrlCreateLabel("", 10, 210, 270, 80)
GUISetState(@SW_SHOW, $gui)

$timer1 = TimerInit()
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $list1
			$iIndex = _GUICtrlListBox_GetCurSel($list1)
			$sItem = $aListData[$iIndex]
			$sMsgText = "index: " & $iIndex & @CRLF & "item: " & $sItem
			ConsoleWrite("=====Selected list1=====" & @CRLF & $sMsgText & @CRLF)
			GUICtrlSetData($label2, $sMsgText)
			$timer1 = TimerInit()
			;MsgBox(0, "list1 selected", $sMsgText, 30, $gui)
	EndSwitch
	If Floor(TimerDiff($timer1)) >= 10000 Then GUICtrlSetData($label2, "")
WEnd
GUIDelete($gui)
Как это можно исправить?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
alex33,
А что мешает для добавления строк пользоваться функцией _GUICtrlListBox_AddString()?
 
Автор
alex33

alex33

Скриптер
Сообщения
1,457
Репутация
186
madmasles сказал(а):
А что мешает для добавления строк пользоваться функцией _GUICtrlListBox_AddString()?
Не знаю :smile:
Я просто думал что между функциями _GUICtrlListBox_AddString и и GUICtrlSetData при добавлении в list нет различий, а оказывается есть...
Ой, заработало с функцией _GUICtrlListBox_AddString... :ok: :smile: ;) :IL_AutoIt_1:
Спасибо!
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
alex33
Код:
GUICtrlSetData($list1, "A|B|C|D|D|E|F|F|F|F|G|H")

а чтобы добавлять оп одному, то
Код:
GUICtrlSetData($list1, $aListData[$i] & '|')


А в справке GUICtrlSetData
Для элементов Combo или List :
Если data уже содержатся в элементе, то эти данные становятся текущими по умолчанию.
Фактически вы не добавляли пункты, а делали их в фокус.
 
Верх