Что нового

[Элементы GUI] Использование GUICtrlSetData в цикле

inx

Знающий
Сообщения
43
Репутация
12
Не понимаю, почему при "$i = 1 To 6" оно заменяет текст только в первых 4х Input ?

Код:
#include <GUIConstantsEx.au3>

Global $TextOne = "Просто текст"
$hGUI = GUICreate("Test", 500, 500)
$Input1 = GUICtrlCreateInput($TextOne, 10, 10, 200, 20)
$Input2 = GUICtrlCreateInput($TextOne, 10, 40, 200, 20)
$Input3 = GUICtrlCreateInput($TextOne, 10, 70, 200, 20)
$Input4 = GUICtrlCreateInput($TextOne, 10, 100, 200, 20)
$Input5 = GUICtrlCreateInput($TextOne, 10, 130, 200, 20)
$Input6 = GUICtrlCreateInput($TextOne, 10, 160, 200, 20)
GUISetState(@SW_SHOW)

For $i = 1 To 6
	Local $smth = "$Input" + $i
	GUICtrlSetData($smth, "> Другой текст <")
Next

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
inx

Код:
#include <GUIConstantsEx.au3>

Global $TextOne = "Просто текст"
$hGUI = GUICreate("Test", 500, 500)
$Input1 = GUICtrlCreateInput($TextOne, 10, 10, 200, 20)
$Input2 = GUICtrlCreateInput($TextOne, 10, 40, 200, 20)
$Input3 = GUICtrlCreateInput($TextOne, 10, 70, 200, 20)
$Input4 = GUICtrlCreateInput($TextOne, 10, 100, 200, 20)
$Input5 = GUICtrlCreateInput($TextOne, 10, 130, 200, 20)
$Input6 = GUICtrlCreateInput($TextOne, 10, 160, 200, 20)
GUISetState(@SW_SHOW)

For $i = 1 To 6
    Local $smth = "Input" & $i
    GUICtrlSetData(Eval($smth), "> Другой текст <" & $i)
Next

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
А так?
Код:
#include <GUIConstantsEx.au3>

Global $TextOne = "Просто текст"
$hGUI = GUICreate("Test", 500, 500)
$Input1 = GUICtrlCreateInput($TextOne, 10, 10, 200, 20)
$Input2 = GUICtrlCreateInput($TextOne, 10, 40, 200, 20)
$Input3 = GUICtrlCreateInput($TextOne, 10, 70, 200, 20)
$Input4 = GUICtrlCreateInput($TextOne, 10, 100, 200, 20)
$Input5 = GUICtrlCreateInput($TextOne, 10, 130, 200, 20)
$Input6 = GUICtrlCreateInput($TextOne, 10, 160, 200, 20)
GUISetState(@SW_SHOW)
Global $aInputs = [$Input1,$Input2,$Input3,$Input4,$Input5,$Input6]

For $i = 0 To 5
    Local $smth = $aInputs[$i]
    GUICtrlSetData($smth, "> Другой текст <")
;~ Sleep(100)
Next

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Или так:
Код:
Local $TextOne = "Просто текст", $j = 10
$hGUI = GUICreate("Test", 500, 500)

For $i=0 To 6
	Assign('Input'&$i, GUICtrlCreateInput($TextOne, 10, $j, 200, 20))
	$j += 30
Next

GUISetState(@SW_SHOW)

For $i = 0 To 6
    GUICtrlSetData(Eval('Input'&$i), "> Другой текст <")
Next

While 1
    Switch GUIGetMsg()
        Case -3
            Exit
    EndSwitch
WEnd

И еще короче:
Код:
Local $TextOne = "Просто текст", $j = 10, $hGUI = GUICreate("Test", 500, 500)
For $i=0 To 6
	Assign('Input'&$i, GUICtrlCreateInput($TextOne, 10, $j, 200, 20))
	$j += 30
Next
GUISetState(@SW_SHOW)
For $i = 0 To 6
    GUICtrlSetData(Eval('Input'&$i), "> Другой текст <")
Next
Do
Until GUIGetMsg() = -3



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

alex33
У вас, ваш пример работает? У меня без задания границ массива работать отказывается.


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

Только если так:
Код:
Global $aInputs[7] = [$Input1,$Input2,$Input3,$Input4,$Input5,$Input6]
 
Верх