Что нового

[Массивы] Цикл присваивания

Serum

Новичок
Сообщения
7
Репутация
0
вообщем есть массив с 14-ю ячйками, есть 14 полей ввода, как реализовать цикл, чтобы текст из этих полей внести в массив.
я попробовал сделать так:
Код:
for $i=1 to 14 step 1	
	 $fraza_chat[$i-1]=GUICtrlRead($fraza&$i)
	 Next

а компилятор ругается...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,487
Serum [?]
я попробовал сделать так:
А как объявляется массив?

Кстати не знаю что вы там пытаетесь сделать с GUICtrlRead, но оно скорее всего работать не будет.
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Ещё б он не ругался. Тебе нужно знать значения, что возвращает GUIGetMsg приобращении к полям ввода и работать с ними. GUICtrlRead($fraza&$i) так работать не будет.
 
Автор
Serum

Serum

Новичок
Сообщения
7
Репутация
0
ну а как тогда это реализовать?
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Код:
GUICreate('gf')
$inp = GUICtrlCreateInput('',1,10)
$inp1= GUICtrlCreateInput('',1,30)
$inp2 = GUICtrlCreateInput('',1,50)
GUISetState()
While 1
	$msg = GUIGetMsg()
	Switch $msg
		Case -3
			Exit 0
		Case $inp
			MsgBox(0,'',$msg)
		Case $inp1
			MsgBox(0,'',$msg)
		Case $inp2
			MsgBox(0,'',$msg)
	EndSwitch
	Sleep(10)
WEnd

Тыкнул в первый edit, набрал какой-нибудь текст, тыкнул мышем в другое место - вылез MsgBox с числом. Это то что тебе нужно. Число постоянно, зависит от расположения элемента в gui.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Serum [?]
ну а как тогда это реализовать?
Попробуйте примерно так.
Код:
#include <GUIConstantsEx.au3>
#include <Array.au3>

$iRand = Random(10, 25, 1)

$hGui = GUICreate('Num ' & $iRand, 200, $iRand * 25 + 30)
$nStart = GUICtrlCreateDummy()
For $i = 0 To $iRand - 1
	GUICtrlCreateInput(_RandomText(Random(5, 15, 1)), 10, 5 + $i * 25, 180, 20)
Next
;$nEnd = GUICtrlCreateDummy()
$nButton = GUICtrlCreateButton('Click me', 50, $iRand * 25 + 5, 100, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState()
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			Local $aInput[$iRand + 1] = [$iRand], $n
			For $i = $nStart + 1 To $nStart + $iRand
				$n += 1
				$aInput[$n] = GUICtrlRead($i)
			Next
			_ArrayDisplay($aInput)
			$aInput = 0
			$n = 0
	EndSwitch
WEnd
;функция только для примера
Func _RandomText($i_Len)
	Local $s_Text
	$i_Len = Int($i_Len)
	If $i_Len < 1 Then Return ''
	For $i = 1 To $i_Len
		$s_Text &= Chr(Random(97, 122, 1))
	Next
	Return $s_Text
EndFunc   ;==>_RandomText
 

running-frag

why me?
Сообщения
441
Репутация
60
Код:
For $i = 1 To 14
	$fraza_chat[$i] = GUICtrlRead ($fraza[$i])
Next

; при условии что

For $k = 1 To 14
	$fraza[$k] = GUICtrlCreateCombo .....
Next
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
running-frag
и при чем тут комбо?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
running-frag
просто фраза "при условии" означает, что если это условие не выполнено, то фокус не удасться. и вообще странно, что человек спрашивает про поля ввода а ты даешь пример, который работает "при условии, что это комбо" :blink:
 

running-frag

why me?
Сообщения
441
Репутация
60
Serum [?]
вообщем есть массив с 14-ю ячйками, есть 14 полей ввода, как реализовать цикл, чтобы текст из этих полей внести в массив.
по моему это полностью разкрывает всё что хочет ТС, а цеплятся на "какое поле ввода" это как то неуместно на мой взгляд. какая разница какое поле ввода? сказано ж что 14 полей ввода, значит 14 "чего то", что должно иметь хэндл и с них нужно прочитать

ps: по моему всё чётко, ну имхо может и не то
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
running-frag
комбо - это не поле ввода.
 
Автор
Serum

Serum

Новичок
Сообщения
7
Репутация
0
Решил проблему проще- сделал одно большое поле Edit, и там уже проще гораздо
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Шож за проблема. Ты в цикле перебираешь перебираешь названия переменных, а надо перебирать их значения.
Код:
for $i=1 to 14
     $fraza_chat[$i]=GUICtrlRead($i+3)
Next
 

sss

Продвинутый
Сообщения
332
Репутация
96
Если мне не изменяет память, можно вроде сделать вот так:
Код:
for $i=1 to 14 step 1   
    $fraza_chat[$i-1]=GUICtrlRead(Eval("fraza" & $i))
Next
 
Автор
Serum

Serum

Новичок
Сообщения
7
Репутация
0
пробовал я так, не поперло
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Да ну!?

Код:
#include <Array.au3>

Global $Array[4]

$hForm = GUICreate('', 400, 400)
$Edit1 = GUICtrlCreateEdit('Test Edit1', 0, 0, 200, 200)
$Edit2 = GUICtrlCreateEdit('Test Edit2', 200, 0, 200, 200)
$Edit3 = GUICtrlCreateEdit('Test Edit3', 0, 200, 200, 200)
$Edit4 = GUICtrlCreateEdit('Test Edit4', 200, 200, 200, 200)
GUISetState()

For $i = 0 To 3
	$Array[$i] = GUICtrlRead(Eval('Edit' & $i + 1))
Next

_ArrayDisplay($Array)

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

sss

Продвинутый
Сообщения
332
Репутация
96
Эх, опередил :smile:

Вот начеркал пример, там инпуты тоже в цикле создаются. Меняете n - меняется кол-во инпутов.
Код:
#include <GUIConstantsEx.au3>
#include <Array.au3>

$n = 20
$Form1 = GUICreate("Values to Array", 235, 20 + 25 * ($n - 1))
For $i = 1 To $n
	Assign('input_' & $i, GUICtrlCreateInput("Input" & $i, 8, 8 + 24 * ($i - 1), 121, 21))
Next
$Button1 = GUICtrlCreateButton("Values to Array", 136, 8, 91, 25)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			Dim $array[$n]
			For $i = 1 To $n
				$array[$i - 1] = GUICtrlRead(Eval('input_' & $i))
			Next
			_ArrayDisplay($array)
	EndSwitch
WEnd

Assign - присваивает переменной значение, Eval считывает.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Можно так:

Код:
#include <Array.au3>

Global $iInput[20], $iSeek = 0

$hForm = GUICreate('', 400, 420)
For $i = 0 To UBound($iInput) - 1
	$iInput[$i] = GUICtrlCreateInput('Input' & $i, 0, $iSeek, 400, 20)
	$iSeek += 20
Next	
$iButton = GUICtrlCreateButton('start', 0, 400, 400, 20)
GUISetState()

While 1
	Switch GUIGetMsg()
	    Case -3
		    Exit
		Case $iButton
            Dim $Array[UBound($iInput)]	
			For $i = 0 To UBound($Array) - 1
	            $Array[$i] = GUICtrlRead($iInput[$i])
            Next
			_ArrayDisplay($Array)
	EndSwitch
WEnd
 
Верх