Automatische Variablennamen

  • Hallo, ich möchte eine Schleife laufen lassen und darin bei jedem Durchlauf eine neue Varible erstellen z.B. $Button1, $Button2, $Button3 ,...

    Code
    $sektionen = IniReadSectionNames(@MyDocumentsDir & "\versionswitcher.ini")
    $k = 0
    For $j = 1 To $sektionen[0]
    $Button[$j] = GUICtrlCreateButton($sektionen[$j], $k, 56, 89, 25, 0)
    $k = $k + 96
    Next

    leider klappt $Button[$j] nicht.

    Fehlermeldung: WARNING: $Button possibly not declared/created yet

    Also hat das Programm vor ein Array zu erstellen? Das war eigentlich nicht das was ich vorhabe ;)

    Vorschläge, Ideen, sonstiges?

    Danke im voraus, Sascha

    Einmal editiert, zuletzt von Glare (3. Dezember 2009 um 09:49)

  • Was ist denn so schlimm an nem array?

    [autoit]


    $sektionen = IniReadSectionNames(@MyDocumentsDir & "\versionswitcher.ini")
    $k = 0
    Dim $Button[$sektionen[0]+1];erstellt einen Array mit so groß, wie die For-Next-schleife durchläufe haben wird.
    For $j = 1 To $sektionen[0]
    $Button[$j] = GUICtrlCreateButton($sektionen[$j], $k, 56, 89, 25, 0)
    $k = $k + 96
    Next

    [/autoit]

    Edit: Ausgebessert. Natürlich hast du Recht, Andy

  • [autoit]

    $Button[$j]

    [/autoit]

    Das ist ein Array^^. Aber der Ansatz ist ja genu richtig. Wenn du schon vorher weisst wieviele Buttons du erstellen willst, dann ist das auch kein Problem

    [autoit]

    $sektionen = IniReadSectionNames(@MyDocumentsDir & "\versionswitcher.ini")

    [/autoit][autoit][/autoit][autoit]

    $k = 0
    dim $button[$sektionen[0]+1]
    For $j = 1 To $sektionen[0]
    $Button[$j] = GUICtrlCreateButton($sektionen[$j], ($i-1)*96, 56, 89, 25, 0)
    Next

    [/autoit]

    /*EDIT*/ wieder mal der langsamste, dafür hat SEuBo falsch DIMensioniert :P

  • Hi,

    der Vollständigkeitshalber:
    In der For Schleife For $j =....

    Assign ("Button" & $j, GUICtrlCreateButton($sektionen[$j], $k, 56, 89, 25, 0), 2) ; erzeuge Variable im globalen Scope

    Weitere Infos s. Hilfe Assign () und Eval ()

    ;-))
    Stefan

  • Nur ein Beispiel, wie man eine Variable Anzahl Buttons verwalten kann. Alternativ über die GUICtrlSetOnEvent-Funktion und die Verwendung von @Gui_CtrlID

    Spoiler anzeigen
    [autoit]


    $numberofbuttons = 24 ;number from 1 to 30
    Dim $buttoncontrolID[$numberofbuttons + 1]

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("test")
    For $i = 1 To $numberofbuttons ;we make an array of buttons
    $buttoncontrolID[$i] = GUICtrlCreateButton(" Button " & $i, 10 + ((($i > 10) + ($i > 20)) * 100), 30 + ($i - (($i > (($i > 20) + 1) * 10) * (($i > 20) + 1) * 10)) * 30,85,30)
    Next
    $somethingbutton=guictrlcreatebutton("do something ",310,30,80,30 )

    [/autoit] [autoit][/autoit] [autoit]

    ;here you could give the buttons an other text or color
    guictrlsetdata($buttoncontrolID[1] ,"Push!")
    GUICtrlSetColor($buttoncontrolID[1],0xFF00FF)
    guictrlsetdata($buttoncontrolID[13],"Push ME!")
    GUICtrlSetColor($buttoncontrolID[13],0x000FFF)
    guictrlsetdata($buttoncontrolID[17],"Push ME TOO!")
    GUICtrlSetColor($buttoncontrolID[17],0xFF0000)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case -3 ;exit is pressed
    Exit
    case $somethingbutton
    Msgbox (0,"","Button do something is pressed")

    [/autoit] [autoit][/autoit] [autoit]

    Case $buttoncontrolID[1] To $buttoncontrolID[$numberofbuttons] ;one of the "array"-Buttons is pressed
    call ("_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg))) ;names oft the functions are _arraybutton_1() _arraybutton_2().....
    If @error = 0xDEAD And @extended = 0xBEEF Then MsgBox(4096, "ERROR", "Function "&"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg))&" does not exist!")
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;*******************functions********************************
    func _arraybutton_1()
    msgbox(0,"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg)),"arraybutton pressed: "&GUICtrlRead($msg))
    endfunc
    ;
    ; here are the funcs of the buttons
    ;
    ;
    func _arraybutton_13()
    msgbox(0,"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg)),"arraybutton pressed: "&GUICtrlRead($msg))
    endfunc

    [/autoit] [autoit][/autoit] [autoit]

    func _arraybutton_17()
    msgbox(0,"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg)),"arraybutton pressed: "&GUICtrlRead($msg))
    endfunc

    [/autoit]