Combobox mehrspaltig?

  • Hallo,

    ich habe mnal wieder ein Problem mit einer Combobox.
    Kurze Erklärung:
    Die Combobox hat 2 Spalten. (sollte 2 Spalten lesen)
    In der ersten Spalte sind die Hauptbegriffe
    und in der 2. Spalte sind spezielle Nummern.

    Was ich brauche ist folgendes:
    Wenn in der Combobox etwas gewählt wurde
    dann soll eine dazugehörige Nr. erscheinen.

    Zitat

    Schäferhund | 2011
    Dackel |44557

    Die Nummer sollte man aber bei der Auswahl nicht sehen

    [autoit]


    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Form1", 615, 440, 192, 124)
    $Combo1 = GUICtrlCreateCombo("Combo1", 40, 44, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "Collie|Schäferhund|Dackel")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo1
    MsgBox(4,"Nr", GUICtrlRead ($Combo1) & " hat die Nr.")
    EndSwitch
    WEnd

    [/autoit]

    Muß ich da eine csv machen und irgendwie die Spalten lesen?


    Liebe Grüße
    Ilse ;)

  • Hallo Autobert,

    genau vor diesem Problem stehe ich auch. Ich habe da eine Textdatei mit jeweils zwei Felder pro Datenzeile. Diese sind durch TAB getrennt. In der Combobox soll jedoch nur das erste Feld (also der Eintrag vor dem TAB) zu sehen sein, das zweite Feld würde ich gerne "ausblenden".

    Ist es in AutoIt möglich, eine Combobox mit zwei Spalten zu definieren, wobei die zweite Spalte dann den Offset > der Combobox-Breite hat? So könnte man den selektierten Eintrag lesen und dann den Teil nach dem TAB ebenfalls zurück erhalten.

    Leider geht das aus dem Beispiel mit dem _GUICtrlComboBoxEx_Create so nicht hervor.

    Danke vorab für Deine Hilfe.
    Grüße

    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]

  • Hallo TheDude,

    falls deine 2. Spalte keine Integerwerte enthält kannst du es nur über den Umweg eines Array's lösen:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GuiComboBox.au3>
    #include <GUIConstantsEx.au3>
    #include <array.au3>
    #include <File.au3>

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

    Const $sCSV = @ScriptDir & "\2cbo.TXT"
    Const $sElect = "bitte auswählen"
    Dim $a_sCSV, $aSplit, $scboChr = ""
    _FileReadToArray($sCSV, $a_sCSV)
    Dim $aCSV[$a_sCSV[0]][2]
    For $i = 1 To UBound($a_sCSV) - 1
    ConsoleWrite($i & $a_sCSV[$i] & @CRLF)
    $aSplit = StringSplit($a_sCSV[$i], ";")
    If Not StringInStr($scboChr, $aSplit[1]) Then $scboChr &= $aSplit[1] & "|"
    $aCSV[$i - 1][0] = $aSplit[1]
    $aCSV[$i - 1][1] = $aSplit[2]
    Next
    ConsoleWrite($scboChr & @CRLF)

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

    $hGui = GUICreate("2 Comboboxen aus 1er CSV", 250, 120, 302, 218)
    $hcboChr = GUICtrlCreateCombo($sElect, 8, 8, 200, 25)
    GUICtrlSetData(-1, $scboChr)
    $hcboChrNr = GUICtrlCreateCombo("", 8, 35, 200, 25)
    $hbtnExit = GUICtrlCreateButton("Be&enden", 8, 65)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $hbtnExit
    Exit
    Case $hcboChr
    $sVal = GUICtrlRead($hcboChr)
    GUICtrlSetData($hcboChrNr, "")
    If $sVal <> $sElect Then
    $aSplit = _ArrayFindAll($aCSV, $sVal, 0, 0, True, True, 0)
    $scboChr = ""
    For $i = 0 To UBound($aSplit) - 1
    $scboChr &= $aCSV[$aSplit[$i]][1] & "|"
    Next
    ConsoleWrite($scboChr & @CRLF)
    GUICtrlSetData($hcboChrNr, $scboChr)
    _GUICtrlComboBox_SetCurSel($hcboChrNr, 0)
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Hier noch die benötgte autoit.de/wcf/attachment/12363/

    Bei Integerwerten kannst du auch das in Post #2 zitierte Beispiel verwenden,

    mfg autoBert

  • Hallo Autobert,

    ... danke Dir, das habe ich verstanden. Nur möchte ich das CSV eben nur in einer Combobox darstellen und zwar so, daß das zweite Feld nicht sichtbar ist (also ganz weit rechts erscheint), wenn ich die Box "aufklappe". Natürlich kann ich zwischen dem ersten Feld und dem zweiten Feld 100+X Leerzeichen machen, fand das aber irgendwie unschön ... ;)

    Viele Grüße
    TheDude

    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    [Cicero, Philippica 12,2]