Что нового

[Массивы] Создание кнопок циклом с помещением результатов в массив

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
Здравствуйте!
Снова нужна Ваша помощь :smile:

Помогите разобраться как сделать следующее.
Есть файл с приблизительно таким содержимым:
i_petrov pass1
v_ivanov pass2
s_sidorov pass3
Из него вытягиваю данные в двухмерный массив
Код:
| v_ivanov | pass2 |
Далее создаю циклом кнопки где названием кнопки выступает например "v_ivanov" (значение из первой колонки) .
Необходимо сделать так чтоб при нажатии на любую из созданых кнопок, она возвращала свое значение из массива второй колонки. В данном случае "pass2"
Вот что наваял пока

Код:
#include <Array.au3>
#Include <File.au3>
#include <GUIConstants.au3>

$LsUser = FileOpen($temp_txt, 0)
$sString = FileRead($LsUser)

$aResult = StringRegExp ($sString, '._.+?\s', 3)
$aResult1 = StringRegExp ($sString, 'pass.+?\s', 3)
FileClose($LsUser)

GUICreate (@ScriptName, 270, 300)
$b = GUICtrlCreateButton ("Create", 180, 10, 70, 25)
GUISetState(@SW_SHOW)

$s = UBound ($aResult)
Dim $aArray[$s][2]
For $i = 0 To $s-1 Step 1
	$aArray[$i][0] = $aResult[$i]
	$aArray[$i][1] = $aResult1[$i]
Next
;~ _ArrayDisplay ($aArray)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $b
			_CreateButtons ()
	EndSwitch
WEnd

Func _CreateButtons ()
	For $i = 0 To $s-1 Step 1
		GUICtrlCreateButton($aArray[$i][0], 10, 30*$i, 150, 25)
	Next
EndFunc


Буду так же очень признателел за оптимизацию кода
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Примерно так:
Код:
#include <Array.au3>
;#Include <File.au3>
#include <GUIConstants.au3>

dim $aResult[3][2]=[['Petrov', 'Pass1'], ['Ivanov', 'Pass2'], ['Sidorov', 'Pass3']]	
;_ArrayDisplay ($aResult, '$aResult')
GUICreate (@ScriptName, 270, 300)
$ButCreate= GUICtrlCreateButton ("Create", 180, 10, 70, 25)
$s = UBound ($aResult)
Global $aID_Button[$s]=[1]
;_ArrayDisplay ($aID_Button)	
	
GUISetState()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
		Case $GUI_EVENT_CLOSE
            ExitLoop
		Case $ButCreate
           _CreateButtons ($aID_Button)
		Case $aID_Button[0] To  $aID_Button[$s-1]
			$iIndex=$nMsg-$aID_Button[1]+1
			MsgBox(4096,$iIndex,  $aResult[$iIndex][1], 1)
	EndSwitch
WEnd

Func _CreateButtons (ByRef $aBut)
	For $i = 0 To $s-1
       $aBut[$i]= GUICtrlCreateButton($aResult[$i][0], 10, 30*$i, 150, 25)
    Next
EndFunc
 
Автор
P

panda_911

Только вверх, только вперед!
Сообщения
52
Репутация
8
2gregaz Огромное спасибо! То что нужно!
Сейчас только попробую разобрать непонятные моменты в коде.
 
Верх