For...Next... für Funktionen?

  • Hallo,

    Ich habe folgendes Problem.

    Ich habe mir eine Gui gebastelt, in der beliebig viele Buttons drin sind. Die Anzahl lege ich vorher mit einer Variable fest.
    Hiermit werden schonmal die Buttons je nach Anzahl erstellt:

    Code
    $high = 10
    Global $button[99]
    $x = 1
    
    For $i = 1 To $anzahl Step 1
    $buttonname = "Button " & $i
    $button[$x] = GUICtrlCreateButton ($buttonname,10,$high-7)
    $high = $high +30
    $x = $x +1
    Next

    Mit dem nächsten Teil, weise ich jedem Button eine Funktion zu:

    Code
    For $y = 1 To $anzahl Step 1
    GUICtrlSetOnEvent ($button[$y],"button"&$y)
    Next

    Jetzt kommt meine Frage:

    Wenn ich 5 Buttons habe, wie mache ich es, dass ich nicht für jeden Button eine Funktion schreiben muss?
    Die Funktionen sollen gleich sein, bis auf eine Zahl die sich ändern soll.

    Mein Code funktioniert wenn ich dementsprechend viele Funktionen schreibe:

    Habe es auch mit einer For...Next Schleife probiert, das haut aber nicht hin.
    Habt ihr eine Idee?

    Gruß

  • Schau mal unter @GUI_CtrlId bzw. unter @GUI_CtrlHandle in der Hilfe. Damit sollte es möglich sein, aus immer der gleichen Fuktion die Du mit GUICtrlSetOnEvent zuweist, auf unterschiedliche Controls zu reagieren.

    So z.B.:

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    Einmal editiert, zuletzt von Micha_he (24. Juli 2019 um 10:47)

  • Oder du übergibst beim Aufruf der Funktion deine Variable und diese wird in der Funktion entsprechend eingesetzt. Dann bleibt die Funktion immer die Gleiche.

  • Wüsste nicht, das das bei GUICtrlSetOnEvent() geht !?

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Schau mal unter @GUI_CtrlId bzw. unter @GUI_CtrlHandle in der Hilfe. Damit sollte es möglich sein, aus immer der gleichen Fuktion die Du mit GUICtrlSetOnEvent zuweist, auf unterschiedliche Controls zu reagieren.

    So z.B.:

    Ja, sowas meine ich.
    Ich verstehe die If ... Else ... schleife noch nicht ganz.
    ich bekomme es hin, das ganze umzuschreiben, nur möchte ich es gern verstehen.

    Oben steht ja: "Global $iFirstButtonId" ohne der Variable einen Wert zuzuweisen.
    Dann "If Not $iFirstButtonId Then"... Wenn nicht "was?" dann... verstehe ich nicht.

    "Else GuiCtrlCreateButton" ... Ohne einer Variable...

    Dann: GUICtrlSetOnEvent (-1,"_ButtonAktion")... die -1 heißt das letzte erstellte Element.
    Erstelle ich die Buttons einzeln, funktioniert tatsächlich auch nur der Letzte Button.

    Kann mich einer aufklären? ^^


    /Edit: Wenn ich vor der MsgBox mir $iFirstButtonId und @GUI_CtrlId anzeigen lasse, spuckt er mir für $iFirstButton ID eine 3 und für @GUI_CtrlId eine Zahl ab 3 aus, je nach dem wieiviele Buttons es gibt. Wo kommen diese Zahlen her?

    Einmal editiert, zuletzt von Joschy41 (24. Juli 2019 um 20:36)

  • Hallo Joschy41

    Oben steht ja: "Global $iFirstButtonId" ohne der Variable einen Wert zuzuweisen.
    Dann "If Not $iFirstButtonId Then"... Wenn nicht "was?" dann... verstehe ich nicht.

    Naja, hier wird einfach die erste ID der Buttons gespeichert. Wenn das Beispiel genau so ist, kann man das auch so machen.

    EDIT: Ich hatte zuerst deine Kernfrage vergessen ^^ Wenn du eine Variable nur deklarierst oder 0 zuweist, ist die Prüfung "If Not $iFirstButtonId Then" positiv. Das ist also beim ersten Durchlauf der Fall. Danach hat $iFirstButtonId einen Wert und die Prüfung ist negativ - es geht also in den Else-Strang.

    Hintergrund ist, dass jedes Control eine ID bekommt. Die IDs werden nach Erstellung iteriert. Wenn du nacheinander 5 Buttons erstellst, haben die aufeinander folgende IDs - etwa 5, 6, 7, 8, 9, 10.

    Hier wird das ausgenutzt, um in der Funktion _ButtonAktion mittels etwas Mathe zu ermitteln, welcher Button gedrückt wurde.

    Code
    Func _ButtonAktion()
    Msgbox(0,"Info", "Button Nr. " & @GUI_CtrlId - $iFirstButtonId + 1 & " wurde gewählt.")
    EndFunc

    Sagen wir Button 3 wird gedrückt. Der hat die ID 7. Button Eins hat die ID 5. Dann wird hier gerechnet 7 - 5 + 1 = 3. Ausgegeben wird dann, dass Button Drei gedrückt wurde.

    Grüße autoiter

  • Danke autoiter für deine erklärende Hilfe an Joschy41. War nicht online und konnte es daher nicht kommentieren.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"