ComboBox leeren

  • Hi autoit-Forum
    ich hänge gerade an ner comboBox,
    eigentlich sollte folgender Befehl alle Einträge aus der combobox löschen

    [autoit]

    _GUICtrlComboBox_ResetContent($combo)

    [/autoit]


    bei mir passiert aber nur das die einträge "unsichtbar werden" wenn ich dann was neues eintragen will hab ich alle alten einträge und die neuen drin.
    Das sind alle befehle die mit die ich benutz die mit der ComboBox zu tun haben.

    [autoit]


    Global $combo=GUICtrlCreateCombo ("",50,70,100,25)
    GUICtrlSetData($combo, $zs)
    _GUICtrlComboBox_ResetContent($combo)

    [/autoit]


    könnte jemand so freundlich sein und mir sagen was ich falsch mach?^^
    oder ne alternative posten?^^
    Danke im Voraus
    jojox

  • Wo schreibst du denn die neuen Werte in die Combobox? Poste doch bitte das gesamte Script

  • Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <file.au3>
    #include <date.au3>
    #Include <GuiComboBox.au3>
    Opt("GUIOnEventMode", 1)

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

    $SZString='/,\,:,*,?,",<,>,|'
    Global $SonderZeichen=StringSplit($SZString, ',')
    Global $OutputPhat
    Global $InputPhat
    Global $Datentypen[1]
    Global $Ordner[1]
    main()

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

    Func main()
    $Datentypen[0]=0
    $Ordner[0]=0

    GUI_Create()

    While True
    sleep(1000*60)
    WEnd

    EndFunc

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

    Func SelectFile()
    dim $ini
    $InputPhat=FileOpenDialog("Einstellungen Laden","C:\","Einstellungen(*.ini)",1+2)
    if $InputPhat<>"" Then
    _FileReadToArray($InputPhat,$ini)
    ;ermitelt die ordner und datentypen und speichert sie in ein array
    for $i=0 To $ini[0]
    $defini=StringLeft($ini[$i],6)
    $zs=StringMid($ini[$i],8)
    if $defini="Ordner" then
    _ArrayAdd($Ordner,$zs)
    $Ordner[0]+=1
    ElseIf $defini="DatTyp" Then
    _ArrayAdd($Datentypen,$zs)
    $Datentypen[0]+=1
    EndIf
    Next
    $zs=""
    ;Datentypen werden für die combobox in ein string gespeichert
    for $i=1 to $Datentypen[0]
    if $i<>$Datentypen[0] Then
    $zs&=$Datentypen[$i]&"|"
    Else
    $zs&=$Datentypen[$i]
    EndIf
    Next
    ;Datentypen werden in der combo box angezeigt
    GUICtrlSetData($combo, $zs)
    GUICtrlSetState($button_start,$GUI_ENABLE)
    Else
    GUICtrlSetState($button_start,$GUI_DISABLE)
    EndIf
    EndFunc

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

    Func start()
    MsgBox(0,"","Start",2)
    For $i=1 to $Ordner[0]
    $groesse=0
    Global $StringFiles[1]
    $StringFiles[0]=0
    GetFilesFromFolder($Ordner[$i],GUICtrlRead($combo))
    if $StringFiles[0]>0 Then
    for $j=1 to $StringFiles[0]
    $groesse+=FileGetSize($StringFiles[$j])
    Next
    EndIf
    ;byte zu megabyte
    $groesse/=1024*1024
    ;nachkommastellen kürzen
    $groesse=$groesse-MOD($groesse,1)
    dim $savetext
    if $groesse>1500 Then
    ;megabyte zu gigabyte
    $groesse/=1024
    ;nachkommastellen kürzen
    $groesse=$groesse-MOD($groesse,0.1)
    $savetext=$groesse & " GB"
    Else
    $savetext=$groesse & " MB"
    EndIf
    dim $SaveDateiName=$Ordner[$i]&"_"&_NowCalcDate()&".txt"
    for $k=1 to $SonderZeichen[0]
    $SaveDateiName=StringReplace($SaveDateiName,$SonderZeichen[$k],"_")
    Next
    $ZSOutputPhat=StringSplit($InputPhat,"\")
    $OutputPhat=""
    for $l=1 to $ZSOutputPhat[0]-1
    $OutputPhat=$OutputPhat&$ZSOutputPhat[$l]&"\"
    Next
    msgbox(0,"",$OutputPhat)
    FileWriteLine ($OutputPhat&"\"&$SaveDateiName, "Im Ordner "&$Ordner[$i]&" sind "&$StringFiles[0]&" *."&GUICtrlRead($combo)& " Dateien mit einer größe von "& $savetext)
    if GUICtrlRead($check)=1 Then
    for $j=1 to $StringFiles[0]
    FileWriteLine ($OutputPhat&"\"&$SaveDateiName,@TAB &$StringFiles[$j])
    Next
    EndIf
    Next
    MsgBox(0,"","fetig")
    EndFunc
    Func GUI_Create()
    Dim $GUITitle="Finderling"
    Dim $GUIWidth = 300
    Dim $GUIHeight = 150
    Global $WindowGui = GUICreate($GUITitle, $GUIWidth, $GUIHeight)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Program_Exit")

    Global $check=GUICtrlCreateCheckbox ( "LongLog", 170, 60 )
    Global $combo=GUICtrlCreateCombo ("",50,70,100,25)
    Global $button_start=GUICtrlCreateButton("Start",50,100, 100, 25)
    Global $label=GUICtrlCreateLabel("l",170,105,100,50)
    GUICtrlCreateLabel("DatenTyp:",50,50,80,20)
    GUICtrlSetOnEvent($button_start,"start")
    $button_SelectFile=GUICtrlCreateButton("SelectIniFile", 50, 20, 100, 25)
    GUICtrlSetOnEvent($button_SelectFile,"SelectFile")
    $button_Hilfe=GUICtrlCreateButton("Hilfe", 170, 20, 90, 25)
    GUICtrlSetOnEvent($button_Hilfe,"Hilfe")
    GUICtrlSetState($button_start,$GUI_DISABLE)
    GUISetState(@SW_SHOW)
    EndFunc
    Func Program_Exit()
    Exit
    EndFunc
    Func Hilfe()
    _GUICtrlComboBox_ResetContent($combo)
    MsgBox(0,"","Einträge in der ini Datei müssen folgenden Aufbau haben:"& @CRLF & _
    "Ordner:C:\"&@CRLF & _
    "Ordner:G:\"&@CRLF & _
    "DatTyp:*"&@CRLF & _
    "DatTyp:exe"&@CRLF & _
    "dabei spielt die Reihenfolge keine Rolle")
    EndFunc

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

    Func GetFilesFromFolder($Path,$DataTyp)
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    For $folder in $oFSO.GetFolder($Path).SubFolders
    GetFilesFromFolder($folder.Path,$DataTyp)
    Next
    For $File In $oFSO.GetFolder($Path).Files
    $zs=$File.Name
    $zs=StringSplit($zs,".")
    if $DataTyp = $zs[$zs[0]] Or $DataTyp ="*" Then
    _ArrayAdd($StringFiles, $File.Path)
    GUICtrlSetData ($label,$StringFiles[0])
    $StringFiles[0]+=1
    EndIf
    Next
    EndFunc

    [/autoit]
  • Ich mach das immer so:

    [autoit]

    guictrldelete($combo)
    $combo = guictrlcreatecombo("",1,1,50,50)

    [/autoit]


    Also einmal löschen und wieder neu erstellen.

  • klar das wär ne möglichkeit aber mich wunderts das die extra methode dafür nicht funktioniert^^

  • Jo, ging bei mir auch nicht, darum hab ich so improvisiert ^^

    PS:

    [autoit]

    $InputPhat

    [/autoit]


    Also entwerder InputPfad oder InputPath, aber nicht so eine Mischung xD

  • Hab jetzt grade mal was geschrieben, bei mir klappt es:

    Spoiler anzeigen
    [autoit]

    #include <GuiComboBox.au3>
    #include <GUIConstantsEx.au3>
    $Test = "Test1|Test2|Test3"
    $Test2 = "Test4|Test5|Test6"
    Dim $GUITitle = "Finderling"
    Dim $GUIWidth = 300
    Dim $GUIHeight = 150
    Global $WindowGui = GUICreate($GUITitle, $GUIWidth, $GUIHeight)
    Global $check = GUICtrlCreateCheckbox("LongLog", 170, 60)
    Global $combo = GUICtrlCreateCombo("", 50, 70, 100, 25)
    Global $button_start = GUICtrlCreateButton("Start", 50, 100, 100, 25)
    Global $label = GUICtrlCreateLabel("l", 170, 105, 100, 50)
    GUICtrlCreateLabel("DatenTyp:", 50, 50, 80, 20)
    $button_SelectFile = GUICtrlCreateButton("SelectIniFile", 50, 20, 100, 25)
    $button_Hilfe = GUICtrlCreateButton("Hilfe", 170, 20, 90, 25)
    GUISetState(@SW_SHOW)

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

    #Region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $button_start
    GUICtrlSetData($combo, $Test)
    Case $msg = $button_Hilfe
    _GUICtrlComboBox_ResetContent($combo)
    GUICtrlSetData($combo, $Test2)

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

    EndSelect
    WEnd
    #EndRegion - GUI SelectLoop

    [/autoit]


    Wenn ich deinen Code versuche zu deuten, klickst du zuerst auf Select File, wenn du dann die Werte ändern willst auf Hilfe und dann wieder auf Select File?
    Du könntest

    [autoit]

    _GUICtrlComboBox_ResetContent($combo)

    [/autoit]

    direkt in die SelectFile() Funktion setzen, denn dort wird ja auch der neue Wert eingetragen.
    Da ich keine Inidatei habe, kann ich dein Script leider nicht weiter testen

  • 1.Ok ich hab den Fehler gefunden es lag an den arrays da standen die werte noch drin und die neuen wurden dann hinten angehängt usw.

    2. @TheLuBu:klar es war nur bei hilfe drin damit ichs einfacher testen kann^^

    3@TheLuBu: .ini dateien kann jeder erstellen indem man .txt zu .ini macht und unter hilfe wär sogar gestanden wie die ini aufgebaut sein muss aber das nur btw^^

    4.Ich dank euch trotzdem für eure hilfe.

    Ahnungslos: jo genau das hab ich auch festgestellt is glaub einfach bisle warm heute^^