Что нового

[Элементы GUI] перебор кнопок и присвоение каждому элементу свое "имя"

Сообщения
75
Репутация
-2
У меня есть 10 кнопок (button) и каждой надо присвоить случайное число то 1 до 100
$font="Comic Sans MS"
$btn01 = GUICtrlCreateButton("",0, 0, 25, 25)
GUICtrlSetFont (-1, 11, 400, 1, $font)

.....

$btn10 = GUICtrlCreateButton("",0, 25, 25, 25)
GUICtrlSetFont (-1, 11, 400, 1, $font)

$random01 = Random(1, 100, 1)

как мне выполнить условие, цикл, чтобы все работало?)
 

Kasper

Знающий
Сообщения
70
Репутация
8
Код:
#include <GUIConstants.au3>


GUICreate (@ScriptName, 270, 300)
GUISetState()

$count = 10
Global $aButton[$count]=[1]

$Font = "Comic Sans MS"
For $i = 0 To $count-1
	$aButton[$i]= GUICtrlCreateButton(Random(1, 100, 1), 10, 30*$i, 150, 25)
	GUICtrlSetFont (-1, 11, 400, 1, $font)
Next

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd
 
Автор
W
Сообщения
75
Репутация
-2
Kasper сказал(а):
Код:
#include <GUIConstants.au3>


GUICreate (@ScriptName, 270, 300)
GUISetState()

$count = 10
Global $aButton[$count]=[1]

$Font = "Comic Sans MS"
For $i = 0 To $count-1
	$aButton[$i]= GUICtrlCreateButton(Random(1, 100, 1), 10, 30*$i, 150, 25)
	GUICtrlSetFont (-1, 11, 400, 1, $font)
Next

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


Все так, только еще нужно, чтобы имена не совпадали
 
A

Alofa

Гость
Код:
Local $iCout = 10, $aiBtn[$iCout], $sFont = "Comic Sans MS"
Local $aiRandom = _ArrayValues($iCout)

GUICreate('')
GUISetFont(11, 400, 1, $sFont)
For $i = 0 To $iCout - 1
	$aiBtn[$i] = GUICtrlCreateButton($aiRandom[$i], 150, 35 * $i + 30, 100, 30)
Next
GUISetState()

Do
Until GUIGetMsg() = -3

Func _ArrayValues($iC)
	$oDict = ObjCreate('Scripting.Dictionary')
	While $oDict.Count() < $iC
		$oDict.Item(Random(1, 100, 1))
	WEnd
	Return $oDict.Keys()
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
как альтернатива
Код:
Local $iCout = 10, $aiBtn[$iCout], $sFont = "Comic Sans MS"
Local $aiRandom = _CV($iCout)
GUICreate('')
GUISetFont(11, 400, 1, $sFont)
For $i = 0 To $iCout - 1
	$aiBtn[$i] = GUICtrlCreateButton($aiRandom[$i], 150, 35 * $i + 30, 100, 30)
Next
GUISetState()

Do
Until GUIGetMsg() = -3

Func _CV($iCT)
	Local $irdm, $ct, $aVar[$iCT]
	Do
		$irdm = Random(1, 100, 1)
		If IsDeclared($irdm) Then
			ContinueLoop
		Else
			Assign($irdm, $irdm)
			$aVar[$ct] = $irdm
			$ct += 1
		EndIf
	Until $ct = $iCT
	Return $aVar
EndFunc   ;==>_CV
В некоторых случаях можно (даже нужно) обойтись нативными функциями
 
Автор
W
Сообщения
75
Репутация
-2
joiner сказал(а):
как альтернатива
Код:
Local $iCout = 10, $aiBtn[$iCout], $sFont = "Comic Sans MS"
Local $aiRandom = _CV($iCout)
GUICreate('')
GUISetFont(11, 400, 1, $sFont)
For $i = 0 To $iCout - 1
	$aiBtn[$i] = GUICtrlCreateButton($aiRandom[$i], 150, 35 * $i + 30, 100, 30)
Next
GUISetState()

Можно подробнее обьяснить каждый шаг?

Do
Until GUIGetMsg() = -3

Func _CV($iCT)
	Local $irdm, $ct, $aVar[$iCT]
	Do
		$irdm = Random(1, 100, 1)
		If IsDeclared($irdm) Then
			ContinueLoop
		Else
			Assign($irdm, $irdm)
			$aVar[$ct] = $irdm
			$ct += 1
		EndIf
	Until $ct = $iCT
	Return $aVar
EndFunc   ;==>_CV
В некоторых случаях можно (даже нужно) обойтись нативными функциями
 
A

Alofa

Гость
Посмотрел как это делает _ArrayShuffle() с одномерным массивам:
Код:
#include <Array.au3>
Local $aArray[10] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

__ArrayShuffle($aArray)

_ArrayDisplay($aArray)

Func __ArrayShuffle(ByRef $avArray)
	Local $vTmp, $iRand
	
	For $i = UBound($avArray) - 1 To 1 Step -1
		$iRand = Random(0, $i, 1)
		$vTmp = $avArray[$i]
		$avArray[$i] = $avArray[$iRand]
		$avArray[$iRand] = $vTmp
	Next
	Return 1
EndFunc   ;==>__ArrayShuffle
 
Верх