Ordner-Auswahl mit ComboBox

  • Hallo,
    ich möchte in einem Skript einen Ordner auswählen.
    Mit dem folgenden Code klappt das auch:

    Wenn ich nun aber eine Combobox statt eines Input-Feldes nehme, also in Zeile 21:

    Code
    $inpOutPath = GUICtrlCreateCombo("", 168, 200, 137, 21)


    statt

    Code
    $inpOutPath = GUICtrlCreateInput("", 168, 200, 137, 21)

    dann wird der gewählte Ordner nicht angezeigt, sondern nur im Dropdown-Menü unten angehängt.

    Gibt es hier eine Option oder muss ich den Wert mit einer Funktion noch selbst in das Anzeigefeld bringen ?


    Danke.

    Einmal editiert, zuletzt von Axel_Zucker (12. Juli 2008 um 07:53)

  • Hi,

    habe mal versucht es anzupassen, es wird jetzt der erste Eintrag in der Liste angezeigt wenn du das mit der ComboBox machen möchtest.

    Func evtOutPath
    [autoit]


    Func evtOutPath()
    $myFolder = FileSelectFolder("Zielordner:", "", 1)
    If Not @error Then ;<--- Geändert Prüfen ob ein Ordner ausgewählt wurde
    GUICtrlSetData($inpOutPath, $myFolder) ;<--- Geändert Der ComboBox den Wert hinzugügen
    _GUICtrlComboBox_SetCurSel($inpOutPath,0) ;<--- Geändert Den ersten Eintrag auswäheln -- hierfür muss noch die GUIComboBox.au3 per Include mitgenommen werden
    EndIf ;<--- Geändert ENDE

    EndFunc ;==>evtOutPath

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Danke McPoldy,

    das war es fast :) . Da aber immer die letzte Auswahl ganz unten im Dropdown-Menü eingefügt wird, habe ich noch einen Zähler gesetzt, der nach jeder Auswahl inkrementiert wird. Statt:

    [autoit]

    _GUICtrlComboBox_SetCurSel($inpOutPath,0)

    [/autoit]

    heisst es jetzt:


    [autoit]


    _GUICtrlComboBox_SetCurSel($inpOutPath,$ComboBox_Sel)
    $ComboBox_Sel=$ComboBox_Sel+1

    [/autoit]

    Danke für Deine Hilfe.

    • Offizieller Beitrag

    Hi,

    warum nicht so?

    [autoit]

    #include <GuiComboBox.au3>

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

    AutoItSetOption("GUIOnEventMode", 1)

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

    Global $inpOutPath
    Global $btnOutPath

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

    buildGUI()
    GUISetState() ; Programmfenster sichtbar machen

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

    While 1
    Sleep(1000) ; Endlosschleife für den On-Event-Modus
    WEnd

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

    Func buildGUI()
    $GUI = GUICreate("", 633, 454, 261, 221)
    GUICtrlCreateLabel("Zielordner", 104, 208, 68, 17)
    $inpOutPath = GUICtrlCreateCombo("", 168, 200, 137, 21)
    Local $btnOutPath = GUICtrlCreateButton("...", 328, 200, 25, 25, 0)
    ;bei Click auf den Button rufe entsprechende Fkt. auf
    GUICtrlSetOnEvent($btnOutPath, "evtOutPath")
    EndFunc ;==>buildGUI

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

    Func evtOutPath()
    Local $index, $myFolder
    $myFolder = FileSelectFolder("Zielordner:", "", 1)
    If Not @error Then
    _GUICtrlComboBox_BeginUpdate($inpOutPath)
    $index = _GUICtrlComboBox_AddString($inpOutPath, $myFolder)
    _GUICtrlComboBox_EndUpdate($inpOutPath)
    _GUICtrlComboBox_SetCurSel($inpOutPath, $index)
    EndIf
    EndFunc ;==>evtOutPath

    [/autoit]

    Mega

  • Ja, Xeni...

    wenn man sich auskennt, kommt man sicherlich auf viele Lösungen. Ein Anfänger wie ich käme nicht so schnell auf Deine Variante. Ich sehe in ihr auch keinen Vorteil gegenüber meiner Lösung. Beide bewirken exakt dasselbe.

    Schöner wäre natürlich, wenn die Reihenfolge im Dropdown-Menü andersherum wäre. Dann entspricht sie den Menüs anderer Programme (z.B. URL-Liste im Browser).

    Aber das bastel ich mir schon noch hin.

    Erstmal danke.

  • Die Reihenfolge geht durch ..._InsertString :)

    Spoiler anzeigen
    [autoit]

    #include <GuiComboBox.au3>

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

    AutoItSetOption("GUIOnEventMode", 1)

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

    Global $inpOutPath
    Global $btnOutPath

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

    buildGUI()
    GUISetState() ; Programmfenster sichtbar machen

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

    While 1
    Sleep(1000) ; Endlosschleife für den On-Event-Modus
    WEnd

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

    Func buildGUI()
    $GUI = GUICreate("", 633, 454, 261, 221)
    GUICtrlCreateLabel("Zielordner", 104, 208, 68, 17)
    $inpOutPath = GUICtrlCreateCombo("", 168, 200, 137, 21)
    Local $btnOutPath = GUICtrlCreateButton("...", 328, 200, 25, 25, 0)
    ;bei Click auf den Button rufe entsprechende Fkt. auf
    GUICtrlSetOnEvent($btnOutPath, "evtOutPath")
    EndFunc ;==>buildGUI

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

    Func evtOutPath()
    Local $index, $myFolder
    $myFolder = FileSelectFolder("Zielordner:", "", 1)
    If Not @error And Then
    _GUICtrlComboBox_BeginUpdate($inpOutPath)

    ; nur hinzufügen, wenn noch nicht drin :)
    If _GUICtrlComboBox_FindStringExact($inpOutPath,$myFolder)=-1 Then _GUICtrlComboBox_InsertString($inpOutPath,$myFolder,0)

    _GUICtrlComboBox_SelectString($inpOutPath,$myFolder)
    _GUICtrlComboBox_EndUpdate($inpOutPath)
    EndIf
    EndFunc ;==>evtOutPath

    [/autoit]