Combobox updaten

  • Hallo,


    nachdem ich mal wieder lange herumprobiert habe und alles erdenkliche durchgegangen bin brauche ich eure Hilfe.

    Ich habe ein GUI mit einer Combobox. Wenn nun nicht das gewünschte in ihr drinne steht, weil es noch nicht existiert, kann man per Button ein neues GUI aufrufen, um diesen Eintrag zu ergänzen (Name und ein paar weitere Dinge). Wenn ich nun dieses Fenster schließen lasse soll im ersten GUI der eingegebene Name richtig im Alphabet erscheinen. Das Updaten funktioniert soweit so gut, wie dass ich den neuen Text für die Combobox habe und der neue Wert auch an der richtigen Stelle erscheint. Nur die Combobox wird nicht geupdatet.

    So also meine Frage: Wie (lösche ich den Inhalt der Combobox und) füge ich neue Items ein?

    Ich hoffe ihr nehmt mir nicht übel, alle meine unwirksamen Versuche zu erläutern - es wäre viel Arbeit. im groben: Ich habe es mit GuiCtrlSetData($Combobox, $Set, $Default), mit dem Resetten und danach noch mal einfügen probiert, sowie mit addstring und start/endupdate...


    Vielen Dank für eure Hilfe,

    Aquaplant

  • Irgendwie sowas in der Richtung?

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GuiComboBox.au3>
    $hGUI = GUICreate("")
    $hCombo = GUICtrlGetHandle(GUICtrlCreateCombo("", 20, 20, 200, 20))
    GUISetState()

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

    Dim $aEintraege[6] = ["Thorsten", "Peter", "Fritz", "Ralf", "Markus", "Albert"]
    _ArraySort($aEintraege)

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

    _GUICtrlComboBox_ResetContent($hCombo)
    For $i = 0 To UBound($aEintraege) - 1
    _GUICtrlComboBox_AddString($hCombo, $aEintraege[$i])
    Next
    _GUICtrlComboBox_SetCurSel($hCombo,0)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Genau, nur das es immer noch funktionieren soll, wenn vorher ein anderes Gui offen war und einen neuen Eintrag in das Array gemacht hat


    EDIT:

    Spoiler anzeigen
    [autoit]

    GUISetState(@SW_HIDE, $GuiNeuerBezirk)
    Do
    Sleep(5)
    Until WinActive("Neue Straße eintragen") <> 0
    ;~ If WinActive("Neue Straße eintragen") <> 0 Then
    _GUICtrlComboBoxEx_ResetContent($ComboNeueStrasseBezirk)
    ;~ _GUICtrlComboBoxEx_BeginUpdate($ComboNeueStrasseBezirk)
    ;~ _GUICtrlComboBoxEx_AddString($ComboNeueStrasseBezirk, $BezirkName)
    ;~ _GUICtrlComboBoxEx_EndUpdate($ComboNeueStrasseBezirk)
    ;~ MsgBox(0, "RESETTET", "")
    $file = FileOpen(@ScriptDir & "\Bezirke.rts", 0)
    If Not @error Then
    Global $IniBezirke[200]
    $i = 0
    While 1
    $i += 1
    $IniBezirke[$i] = FileReadLine($file, $i)
    If @error Then
    _ArraySort($IniBezirke)
    $IniBezirke[0] = $i - 1
    FileClose($file)
    ExitLoop
    EndIf
    WEnd
    EndIf
    $Set = "---------------------------------------------------------------------------"
    For $i = 199 - $IniBezirke[0] To 199
    $Set = $Set & "|" & $IniBezirke[$i]
    Next
    If StringLeft($Set, 1) = "|" Then
    $Set = StringTrimLeft($Set, 1)
    EndIf
    GUICtrlSetData($ComboNeueKarteiBezirke, $Set, "Bezirk")
    MsgBox(0, "$Set", $Set)
    ;~ EndIf

    [/autoit]


    Ist alles etwas rumgebastelt. Falls der String noch nicht vorhanden ist, kann man ihn ja mithilfe eines neuen GUIs erstellen. Dieses schreibt den Wert dann mit in eine ini (Endung ist ja egal). Die Sachen aus der Ini sollen ausgelesen, alphabetisch sortiert und wieder in die Combobox eingesetzt werden (die alten Werte sollen vorher gelöscht werden, falls sie nicht überschrieben werden mit GuiCtrlSetData)


    EDIT2: Pardon, ist ein ganz normales file, gar keine Ini. --> ist im Anhang (müsste nur noch umbenannt werden)

  • Hallo Aquaplant,

    du kannst doch beim erstellen der Combo den Style $CBS_SORT angeben, dann werden die neuen Einträge automatisch richtig einsortiert,

    mfg (Auto)Bert

  • Hallo aquaplant,

    da du dein Skript nicht gepostet hast, hier ein allgemein gehaltenes Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ComboConstants.au3>
    #Include <GuiComboBox.au3>
    #include <File.au3>
    #include <array.au3>

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

    Global $szDrive,$szDir,$szFName,$szExt

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

    $idGUI = GUICreate("Flaggen", 300, 115)
    $idcbo = GUICtrlCreateCombo("", 10, 10, 180, 80,BitOR($CBS_SORT,$GUI_SS_DEFAULT_COMBO))
    $idNeu = GUICtrlCreateButton("...",200,10,30,25)
    $idVorschau = GUICtrlCreatePic(@ScriptDir & "\Flaggen\NA.jpg", 210, 40, 36, 24)
    $idInfo = GUICtrlCreateButton("&alle auslesem",10,90,180,25)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $idInfo
    $count = _GUICtrlComboBox_GetCount($idcbo)
    Dim $acbo[$count]
    $acbo = _GUICtrlComboBox_GetListArray($idcbo)
    _ArrayDisplay($acbo)
    case $idNeu
    $sAlt = GUICtrlRead($idcbo)
    $sPlus = FileOpenDialog("Land auswählen:",@ScriptDir & "\Flaggen","Bilder (*.jpg)",3,"",$idGUI)
    _PathSplit($sPlus,$szDrive,$szDir,$szFName,$szExt)
    ConsoleWrite($szFName & @CRLF)
    GUICtrlSetData($idcbo,$szFName,$szFName)
    Case $idcbo
    GUICtrlSetImage($idVorschau, @ScriptDir & "\Flaggen\" & GUICtrlRead($idcbo) & ".jpg")
    EndSwitch
    WEnd

    [/autoit]

    mfg (Auto)Bert