checkboxen in einer gui löschen

  • Moin moin,


    Bräuchte mal Hilfe beim löschen von Checkboxen.
    Ich generiere anhand der Spaltenanzahl einer Excel Tabelle ebenso viele Checkboxen und benenne diese mit den Einträgen aus den Zellen der Spalte.Maximal können dies 64 Checkboxen sein.
    Soweit geht das auch alles.
    Nur habe ich verschiedene Tabellen, 5 an der Zahl, die ich über Radiobuttons in der selbigen gui anzeigen lassen möchte.
    Wie bekommt man es hin das man die vorher angezeigten Checkboxen gelöscht bekommt um die neuen anzeigen zu lassen

    Habe mal eine Gui gemacht mit zwei Radios. Die kann es wohl besser ausdrücken was ich möchte

    Testskript
    [autoit]


    #include <GuiDateTimePicker.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ComboConstants.au3>
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <Excel.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <GuiComboBox.au3>
    #include <Date.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <string.au3>
    #include <hotkeys.au3>
    #include <Misc.au3>
    #include <_ToolTipMouseExit.au3>
    #include <GuiEdit.au3>
    #include <GuiConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    testgui()
    Func testgui()
    $Form1 = GUICreate("Testgui", 746, 450, 258, 119)
    $Group2 = GUICtrlCreateGroup("Spalten Löschen für & $neulabel", 4, 30, 737, 338, BitOR($GUI_SS_DEFAULT_GROUP,$BS_LEFT))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Radioeinaus1 = GUICtrlCreateRadio("testtabelle1", 305, 401, 89, 17, BitOR($GUI_SS_DEFAULT_RADIO,$BS_LEFT))
    $Radioeinaus2 = GUICtrlCreateRadio("testtabelle2", 403, 401, 73, 17, BitOR($GUI_SS_DEFAULT_RADIO,$BS_LEFT))
    $beenden = GUICtrlCreateButton("Beenden", 500, 395, 120, 25)

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

    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, "beenden")
    GUICtrlSetOnEvent($Radioeinaus1, "testtabelle1")
    GUICtrlSetOnEvent($Radioeinaus2, "testtabelle2")
    GUICtrlSetOnEvent($beenden, "beenden")

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

    While 1
    Sleep(50)
    WEnd
    EndFunc;==>testgui

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

    Func testtabelle1()
    $Open = FileOpenDialog("",@ScriptDir,"(test1.xls)")
    $oExcel = _ExcelBookOpen($Open)
    $Spalten = $oExcel.Worksheets(1).UsedRange.Columns.Count
    $Spalten = $Spalten+2
    Local $Checkbox[$Spalten]
    Dim $aArray[$Spalten]
    For $i = 1 To UBound($aArray) -1
    $aArray[$i] = _ExcelReadArray($oExcel, 1, $i, 1, 1)
    _ArrayToClip($aArray[$i])
    $ddd = (ClipGet())
    IniWrite(@ScriptDir & "\test.ini", "Zeile1", $ddd, "")
    Next
    _ExcelBookClose($oExcel)

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

    $var = IniReadSection( @ScriptDir & "\test.ini", "Zeile1")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else

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

    For $i = 1 To $var[0][0]-1
    $top = 25 + ($i * 20)
    $left = 25
    If $top > 345 and $left = 25 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    If $top > 345 and $left = 200 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    If $top > 345 and $left = 375 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    If $top > 345 and $left = 550 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    $Checkbox[$i] = GUICtrlCreateCheckbox($var[$i][0], $left, $top, 175, 17)
    Next
    EndIf

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

    EndFunc;==>testtabelle1

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

    Func testtabelle2()
    $Open = FileOpenDialog("",@ScriptDir,"(test2.xls)")
    $oExcel = _ExcelBookOpen($Open)
    $Spalten = $oExcel.Worksheets(1).UsedRange.Columns.Count
    $Spalten = $Spalten+2
    Local $Checkbox[$Spalten]
    Dim $aArray[$Spalten]
    For $i = 1 To UBound($aArray) -1
    $aArray[$i] = _ExcelReadArray($oExcel, 1, $i, 1, 1)
    _ArrayToClip($aArray[$i])
    $ddd = (ClipGet())
    IniWrite(@ScriptDir & "\test.ini", "Zeile2", $ddd, "")
    Next
    _ExcelBookClose($oExcel)
    $var = IniReadSection( @ScriptDir & "\test.ini", "Zeile2")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else

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

    For $i = 1 To $var[0][0]-1
    $top = 25 + ($i * 20);
    $left = 25;
    If $top > 345 and $left = 25 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    If $top > 345 and $left = 200 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    If $top > 345 and $left = 375 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    If $top > 345 and $left = 550 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    $Checkbox[$i] = GUICtrlCreateCheckbox($var[$i][0], $left, $top, 175, 17)
    Next
    EndIf
    EndFunc;==>testtabelle2

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

    Func beenden()
    Exit
    EndFunc;==>beenden

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


    mfg
    oh-ha

  • Hallo,

    ich würde die GUI nicht in eine Funktion packen und da du auf die Checkboxen aus jeder Funktion zugreifen willst diese auch Global deklarieren.
    Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GuiDateTimePicker.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ComboConstants.au3>
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <Excel.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <GuiComboBox.au3>
    #include <Date.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <string.au3>
    ;#include <hotkeys.au3>
    #include <Misc.au3>
    ;#include <_ToolTipMouseExit.au3>
    #include <GuiEdit.au3>
    #include <GuiConstantsEx.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $Form1 = GUICreate("Testgui", 746, 450, 258, 119)
    $Group2 = GUICtrlCreateGroup("Spalten Löschen für & $neulabel", 4, 30, 737, 338, BitOR($GUI_SS_DEFAULT_GROUP,$BS_LEFT))
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Radioeinaus1 = GUICtrlCreateRadio("testtabelle1", 305, 401, 89, 17, BitOR($GUI_SS_DEFAULT_RADIO,$BS_LEFT))
    $Radioeinaus2 = GUICtrlCreateRadio("testtabelle2", 403, 401, 73, 17, BitOR($GUI_SS_DEFAULT_RADIO,$BS_LEFT))
    $beenden = GUICtrlCreateButton("Beenden", 500, 395, 120, 25)

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

    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, "beenden")
    GUICtrlSetOnEvent($Radioeinaus1, "testtabelle1")
    GUICtrlSetOnEvent($Radioeinaus2, "testtabelle2")
    GUICtrlSetOnEvent($beenden, "beenden")
    Global $Checkbox[61]
    For $i = 1 To 60
    $top = 25 + ($i * 20)
    $left = 25
    If $top > 345 and $left = 25 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    If $top > 345 and $left = 200 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    If $top > 345 and $left = 375 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    If $top > 345 and $left = 550 Then
    $left = $left + 175
    $top = $top - 320
    EndIf
    $Checkbox[$i] = GUICtrlCreateCheckbox($i, $left, $top, 175, 17)
    GUICtrlSetState(-1,$GUI_HIDE)
    Next
    While 1
    Sleep(50)
    WEnd

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

    Func testtabelle1()
    $Open = FileOpenDialog("",@ScriptDir,"(test1.xls)")
    $oExcel = _ExcelBookOpen($Open)
    $Spalten = $oExcel.Worksheets(1).UsedRange.Columns.Count
    $Spalten = $Spalten+2
    Dim $aArray[$Spalten]
    For $i = 1 To UBound($aArray) -1
    $aArray[$i] = _ExcelReadArray($oExcel, 1, $i, 1, 1)
    _ArrayToClip($aArray[$i])
    $ddd = (ClipGet())
    IniWrite(@ScriptDir & "\test.ini", "Zeile1", $ddd, "")
    Next
    _ExcelBookClose($oExcel)

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

    $var = IniReadSection( @ScriptDir & "\test.ini", "Zeile1")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else

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

    For $i = 1 To $var[0][0]-1
    GUICtrlSetData($Checkbox[$i],$var[$i][0])
    GUICtrlSetState($Checkbox[$i],$GUI_SHOW)
    Next
    For $i = $var[0][0] To 60
    GUICtrlSetData($Checkbox[$i],'')
    GUICtrlSetState($Checkbox[$i], $GUI_HIDE)
    Next

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

    EndIf

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

    EndFunc;==>testtabelle1

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

    Func testtabelle2()
    $Open = FileOpenDialog("",@ScriptDir,"(test2.xls)")
    $oExcel = _ExcelBookOpen($Open)
    $Spalten = $oExcel.Worksheets(1).UsedRange.Columns.Count
    $Spalten = $Spalten+2
    Dim $aArray[$Spalten]
    For $i = 1 To UBound($aArray) -1
    $aArray[$i] = _ExcelReadArray($oExcel, 1, $i, 1, 1)
    _ArrayToClip($aArray[$i])
    $ddd = (ClipGet())
    IniWrite(@ScriptDir & "\test.ini", "Zeile2", $ddd, "")
    Next
    _ExcelBookClose($oExcel)
    $var = IniReadSection( @ScriptDir & "\test.ini", "Zeile2")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else

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

    For $i = 1 To $var[0][0]-1
    GUICtrlSetData($Checkbox[$i],$var[$i][0])
    GUICtrlSetState(-1,$GUI_SHOW)
    Next
    For $i = $var[0][0] To 60
    GUICtrlSetData($Checkbox[$i],'')
    GUICtrlSetState($Checkbox[$i], $GUI_HIDE)
    Next
    EndIf
    EndFunc;==>testtabelle2

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

    Func beenden()
    Exit
    EndFunc;==>beenden

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hallo Schnuffel,

    dies ist nur eine Testgui gewesen die ich nur zur Veranschaulichung gemacht habe.
    In den eigentlichen Skript ist diese gui eine von zweien und das dann auch noch leider die zweite.
    Deshalb als Funktion. Komme ich leider auch nicht dran vorbei.

    So wie du das umgeschrieben hast geht das auch nur was mache ich wenn ich 5 Tabellen habe die ich umschalten möchte ?
    Habe da wohl ein wenig den Faden verloren.


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Na dann musst Du mal Dein Konzept umdenken.
    Es ist nicht gut, wenn Du in einer Funktion eine While-Schleife hast.

    Außerdem würdest Du die Checkboxen jedesmal neu "aufbauen". Braucht es ja eigentlich auch nicht.

    Vielleicht kannst Du die gesamte Anzeige in eine Funktion packen und immer mit dem jeweiligen Array aufrufen...
    Der Rest ergibt sich dann aus der Anzahl an Elementen...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • ups hatte ich die schleife in die funktion gepackt :rolleyes:
    War wohl eher ein Versehen beim schnellen erstellen dieser Testgui.

    Zitat von Schnuffel

    Vielleicht kannst Du die gesamte Anzeige in eine Funktion packen und immer mit dem jeweiligen Array aufrufen...
    Der Rest ergibt sich dann aus der Anzahl an Elementen...


    Ähm bin da nun eine Woche dran und habe so einiges durchgetestet auch als eigene Funktion aber habe immer den selben Effekt gehabt wie in der Testgui.
    Habe auch mal 64 Checkboxen erstellt und diese dann über eine For-Schleife benannt aber immer mit dem selben Ergebnis.
    Komme da irgendwie nicht weiter.


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Hi!


    vieleicht hilft dir diese kleine Func

    [autoit]

    Func ControlArrayShowHide($aCTRL, $SH = 0)
    If IsArray($aCTRL) Then
    Switch $SH
    Case 0
    For $i = 0 To UBound($aCTRL) - 1
    ControlHide($Form[0], 0, $aCTRL[$i])
    Next
    Case 1
    For $i = 0 To UBound($aCTRL) - 1
    ControlShow($Form[0], 0, $aCTRL[$i])
    Next
    EndSwitch
    EndIf
    EndFunc ;==>ControlArrayShowHide

    [/autoit]

    muss noch angepasst werden, hilft mir gerade in mein Projekt!


    LG kleiner

  • @ Kleiner
    Habe das mal getestet aber bekomme das entweder nicht hin oder geht so nicht.

    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Hi!


    Ein beispiel für dich!

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Dim $Check1[12], $Check2[12]
    Dim $Button1, $Button2, $x = 50

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

    $Form = GUICreate('', 400, 400, -1, -1)

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

    For $i = 0 To 11
    $Check1[$i] = GUICtrlCreateCheckbox('Check ' & $i, 100, $x, 100, 20)
    $Check2[$i] = GUICtrlCreateRadio('Check2 ' & $i, 100, $x, 100, 20)
    $x += 25
    Next
    ControlArrayShowHide($Check2)
    $Button1 = GUICtrlCreateButton('-2-', 10, 10, 50, 20)
    $Button2 = GUICtrlCreateButton('-2-', 10, 40, 50, 20)
    GUISetState()

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

    While 1 * Sleep(10)
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    ControlArrayShowHide($Check1)
    ControlArrayShowHide($Check2, 1)
    Case $Button2
    ControlArrayShowHide($Check2)
    ControlArrayShowHide($Check1, 1)
    EndSwitch
    WEnd

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

    Func ControlArrayShowHide($aCTRL, $SH = 0)
    If IsArray($aCTRL) Then
    Switch $SH
    Case 0
    For $i = 0 To UBound($aCTRL) - 1
    ControlHide($Form, 0, $aCTRL[$i])
    Next
    Case 1
    For $i = 0 To UBound($aCTRL) - 1
    ControlShow($Form, 0, $aCTRL[$i])
    Next
    EndSwitch
    EndIf
    EndFunc ;==>ControlArrayShowHide

    [/autoit]

    Lg Kleiner

  • Danke dir,

    denke mal das es das ist was ich gesucht habe und nie gefunden hätte. :rolleyes:


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit