Objekte auf Gui aktualisieren

  • Hallo,

    Ich lasse per Funktion Objekte auf der Gui in z.B. Tab1 erzeugen.
    Alles gut soweit

    [autoit]


    Func _Felder()
    If IsInt($TabSheet1) Then

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

    GUISwitch($Form1_1, $TabSheet1); Per GuiSwitch auf das Tab umschalten, auf welchem die Controls erstellt werden sollen
    _Checkbox() ; hier werden die Controls erstellt

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

    EndIf

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

    EndFunc ;==>_Felder

    [/autoit]

    Aber folgendes Problem tritt auf:
    Die Objekte werden danach nicht direkt in TAB1 gezeigt.
    Wechsele ich auf TAB 2 und dann Auf TAB1 zurück, dann sind sie da.

    Gibt es irgendein Befehl der nach dem erstellen der Controls sofort die Gui aktualisiert?


    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (20. Juli 2012 um 10:33)

  • Guten Morgen m-obi,

    das ist die Checkbox Func()

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

    Global $language = ''
    Global $spaltenNr = 0
    Global $reihenAnzahl = 5
    Global $oben = 60
    Global $TabSheet1, $Form1_1
    Global $Checkbox, $CheckboxText

    $Split = StringSplit($lang, "|")
    Dim $Checkbox[$Split[0]]
    Dim $CheckboxText[$Split[0]]

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

    Func _Checkbox()
    For $i = 1 To $Split[0] - 1
    If $i > 2 Then
    If Mod($i - 1, $reihenAnzahl) = 0 Then $spaltenNr += 1
    EndIf
    $chkName = StringTrimLeft($Split[$i], 3)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $Checkbox[$i] = GUICtrlCreateCheckbox($chkName & "-" & $i, 40 + 40 * $spaltenNr, $oben * $i - $spaltenNr * $oben * $reihenAnzahl, 35, 30)

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

    Next
    EndFunc

    [/autoit]

    ist alles viel Code, deswegen nur das wichtigste.

    Wie gesagt, wird alles erzeugt aber nicht gleich in der Gui angezeigt.
    Also:
    Beim Starten v. Scite F5 (run Script) ist TAB1 aktiv aber leer.
    Wird der Tab gewechselt und dann wieder TAB1 geklickt sind sie da!

    Hier wird die _Checkbox() aufgerufen

    Spoiler anzeigen
    [autoit]


    ;Gui.....
    GUISetState(@SW_SHOW)
    #EndRegion GUI section

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

    _checkbox(); Die chkBoxen werden erzeugt in TAB 1

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

    GUISetState(@SW_MAXIMIZE)

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

    While 1;..................

    [/autoit]

    Grüße
    Ilse ;)

  • Versuch mal so:

    [autoit]

    Func _Checkbox()
    For $i = 1 To $Split[0]
    If $i > 2 And Mod($i - 1, $reihenAnzahl) = 0 Then $spaltenNr += 1
    $chkName = StringTrimLeft($Split[$i], 3)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $Checkbox[$i - 1] = GUICtrlCreateCheckbox($chkName & "-" & $i, 40 + 40 * $spaltenNr, $oben * $i - $spaltenNr * $oben * $reihenAnzahl, 35, 30)
    Next
    EndFunc

    [/autoit]


    Und wenn möglich nicht Dim verwenden sondern Global oder Local.

    • Offizieller Beitrag

    Auf ein bereits erstelltes Tab im Nachhinein Ctrl zu erstellen macht dir nur Ärger. Um die Zugehörigkeit zum Tab-Item zu gewährleisten müssen alle Ctrl vor Beenden der Tab-Erstellung ( GUICtrlCreateTabItem("") ; == close Tab creation ) generiert werden.

    Um die GUI oder einzelne Bereiche (Ctrl) zu aktualisieren kannst du _WinAPI_RedrawWindow verwenden.