Combobox Indexwert auslesen

  • Hallo,

    ich stehe vor folgendem Problem:

    Ich habe Comboboxen die viele Inhalte haben.
    Diese Inhalte muß ich auslesen und mit case weiterverarbeiten.
    Das wäre ziemlich mühsam, denn ich muß auf jeden Wert reagieren!

    Hier mal das Gerüst:

    [autoit]


    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 615, 206, 375, 180)
    $Combo1 = GUICtrlCreateCombo("Combo1", 32, 36, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "Wert1|Wert2|Wert3|Wert4|Wert5|Wert6|Wert7|Wert8")
    $Start = GUICtrlCreateButton("Start", 196, 36, 75, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Start

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

    EndSwitch
    WEnd

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

    Ich muß das machen

    [autoit]


    $1 = GUICtrlRead($Combo1 )
    Select
    Case $1 = "Wert1"
    Iniwrite('Meine.ini',"Test","Wert1","22")
    EndSelect

    [/autoit]

    Kann man da nicht irgendwie nur den Index der Combobox verarbeiten?
    Ohne den Inhalt zu lesen!

    Zitat

    If Index1...then schreibe den Wert 12 in die ini
    also nicht
    If Wert1 then....

    Ich hoffe ich konnte mein Problem annährend umschreiben!

    Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (1. April 2011 um 11:06)

  • Du schreibst alle Werte in ein Array und dann kannst du das Array so benutzen:

    [autoit]


    $1 = GUICtrlRead($Combo1 )
    $w=int(stringtrimleft($1,4))
    Iniwrite('Meine.ini',"Test",$1,$array[$w-1])

    [/autoit]
  • Hallo,

    merci für deine Hilfe.

    Kannst du mir vielleicht noch ein Beispiel mit einem Loop machen?
    Also combobox durchlaufen lassen...geht das?
    Ich meine daß ich mir die Werte in einer Msgbox nacheinander ausgeben lassen kann.

    Wieso baut man da stringtrimleft ein?

    Die Comboboxen haben unterschiedliche Inhalte: Berlin, Paris,Hamburg....

    Liebe Grüße
    Ilse ;)

  • Dann schildere doch mal genauer was wo drin steht, wofür das ganze sein soll und wie es nachher aussehen soll

  • ich fass das ganze mal mit meinen Worten zusammen:

    1. Die ComboBox hat zahlreiche Städte: Paris, Hamburg, Berlin...

    Nun muß ich auf jede Auswahl reagieren:

    1. Wenn z.B. Paris ausgewählt wurde muß ich bestimmte Zahlenwerte für Paris in meine ini schreiben! z.B. 44, 33, 22
    2. Wird Berlin ausgewählt muß ich andere Zahlenwerte in meine ini schreiben! z.B. 102, 204, 303

    das würde dann so aussehen:
    Wenn Paris ausgewält wird

    [autoit]


    Iniwrite('Stadt.ini',"Gruppe","1","44")
    Iniwrite('Stadt.ini',"Gruppe2","1","33")
    Iniwrite('Stadt.ini',"Gruppe3","1","22")

    [/autoit]


    Grüße
    Ilse ;)

  • Hallo Bugfix,

    genau, das ist ja mein Problem.
    Ich habe je Stadt 10 unterschiedliche Zahlenwerte die ich mit der Combobox je nach Auswahl setzen und auslesen muß.
    Mein Problem ist:
    Wie kann ich das sinnvoll so organisieren, das der User einfach per Combobox die Stadt wählt und voila die 10 dazugehörigen Werte
    werden in die ini geschrieben.
    Ich dachte auch schon an eine Tabelle, nur wie kann ich die Werte
    die in der Tabelle stehen mit einer Combobox (je nachdem was gewählt wurde) auslesen?

    Da bräuchte ich ein Beispiel? Wie ich die csv Datei aufbaue ist klar

    [autoit]


    Stadt; Wert1;Wert2;Wert3...
    Paris;44;33;22
    Berlin;220;547;234

    [/autoit]


    Grüße
    Ilse ;)

  • Hallo Bugfix,

    genau die Werte muß ich ja irgendwo eintragen. Das WO ist die Frage!
    In eine Tabelle, eine ini...
    Es gibt noch kein wo!!! Sagen wir Ich mache mir die Tabelle Stadtinfo.csv
    Was ich habe ist das Combofeld mit allen Städten in meiner Gui!

    Die Tabelle die ich füttern muß (wenn eine Tabelle der richtige weg ist) ich glaube ja...
    würde so aussehen

    [autoit]


    Stadt;Einwohner;Parkhäuser;Schulen...
    Paris;
    Berlin;
    München;

    [/autoit]

    Ich habe das Combofeld mit den Städten in meiner Gui!
    D.h. Das Combifeld mit allen Städten muß in die Tabelle, alles andere wird von mir ausgefüllt
    damit es später abgerufen werden kann.

    Der Nutzer wählt von 100 Städten Paris (in meiner Gui)
    Die ini wird nun geschrieben. Falls eine Lösungstabelle der richtige Weg ist
    die Werte aus einer Tabelle kommen in die "Lösungsini"

    [autoit]


    [Paris]
    Einwohner=
    Parkhäuser=
    Schulen=

    [/autoit]

    Ich hoffe es ist irgendwie angekommen.

    Grüße
    Ilse ;)

    • Offizieller Beitrag

    Ilse, du kostest mich Nerven. :wacko:
    Schon wieder sagst du, dass du die Werte hast und irgendwo eintragen willst.
    Also mal Step by Step.
    - Werte in deinem Kopf, Combo auswählen, Wert hinzufügen (per Input?), in Datei (csv, ini, ..txt egal) speichern
    - Werte in einer Datei, aus Datei einlesen, Combo.. Rest wie oben

    Sag bitte ganz genau welcher Wert von wo nach wo kommt und gespeichert werden soll.

  • Guten Morgen Bugfix,

    tut mir leid wenn ich dich Neven koste.... :(

    Damit du das etwas besser nachvollziehen kannst
    habe ich mal eine Grafik gemacht!

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    • Also, man wählt in der Gui die Stadt
    • Man wählt das Bundesland... (eine Bundeslandtabelle)usw
    • Man klickt auf Auswahl

    D.h. man füllt einmal die Gui aus
    und erhält anhand der ausgefüllten Gui die passenden ini Werte
    die in der jeweiligen Tabelle liegen.
    D.h.
    Ich habe eine Stadttabelle mit allen Werten (Wie im Beispiel
    Ich habe eine Bundeslandtabelle mit allen Werten...

    Zitat

    Sag bitte ganz genau welcher Wert von wo nach wo kommt und gespeichert werden soll.

    Also:

    Zitat

    Stadtwerte werden mit der Stadtcombobox ausgewält, Werte kommen aus der Stadt.csv und landen in der ini [Stadt]
    Bundeslandwerte werden mit der Bundeslandcombobox ausgewält, kommen aus der Bundesland.csv und landen in der ini [Bundesland]

    Und nun zum Handling:

    Wie kann man wenn man auf den Button klickt diese Zahlen.Ini schreiben

    Grüße
    Ilse ;)

    • Offizieller Beitrag

    Ich habe mal ein Bsp. anhand der Combo Stadt erstellt.
    Unklar ist mir deine INI-Gestaltung. Wird das für jede Stadt eine eigene? Dann ist das OK, anderenfalls macht es keinen Sinn.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    ; ich gehe hier davon aus, dass die Combos (Stadt, Bundesland) befüllt sind

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

    ; unklar ist noch:
    ; Wird für jede Stadt eine eigene INI geschrieben?
    ; Falls nicht sollte die Sektion nicht Stadt heißen,
    ; sondern den Namen der Stadt tragen und alle zugehörigen Werte als Keys dieser Sektion
    Global $sPathINI = 'Pfad_INI.ini' ; eine? - für jede Stadt eine?

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

    Global $aStadt, $sPathStadt = 'Pfad_Stadt.csv'
    Global $sSeparatorCSV = ';' ;<== falls kein Semikolon, hier ändern
    Global $aKeys[11] = ['Stadt'] ; Array mit Keys für INI erstellen
    For $i = 1 To 10
    $aKeys[$i] = 'Wert' & $i
    Next
    _FileReadToArray($sPathStadt, $aStadt) ; Stadt.csv einlesen in Array
    ; Element1 ist Zähler, Element2 enthält Spaltenüberschriften
    ; in 2D-Array übertragen
    Global $aStadt2D[$aStadt[0]-1][11]
    Local $aTmp
    For $i = 2 To $aStadt[0]
    $aTmp = StringSplit($aStadt[$i], $sSeparatorCSV)
    For $j = 1 To $aTmp[0]
    $aStadt2D[$i-2][$j-1] = $aTmp[$j]
    Next
    Next

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

    ;...
    ;...

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Start
    _WriteINI()
    EndSwitch
    WEnd

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

    Func _WriteINI()
    Local $sStadt = GUICtrlRead($Combo1)
    Local $index = _ArraySearch($aStadt2D, $sStadt, 0, 0, 1, 0, 1, 0)
    If @error Then Return
    Local $sToWrite = ''
    For $i = 0 To 10
    $sToWrite &= $aKeys[$i] & '=' & $aStadt2D[$index][$i] & @LF
    Next
    IniWriteSection($sPathINI, 'Stadt', StringTrimRight($sToWrite, 1))
    EndFunc

    [/autoit]
  • Guten Morgen Bugfix,

    konnte mich gestern leider nicht mehrt melden, mußte wieder los!
    Ich probiere schon die ganze Zeit das Script zum laufen zu bringen.

    Hab's jetzt endlich geschafft.
    Das hatte gefehlt:

    #include <file.au3>

    Probiere jetzt alles unter einen Hut zu bringen.

    MERCI für deine Hilfe

    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (1. April 2011 um 11:05)