2 Combos

  • hi,
    ich habe folgendes problem:
    ich möchte gerne 2 combos erstellen. wenn ich in der ersten combo dann z.b. "1" auswähle, soll in der 2ten combo auch die zahl "1" auswählbar sein.
    wenn ich eine 7 in der ersten auswähle dementsprechend auch in der 2ten combo die zahlen 1-7 auswählbar sein.
    gut soweit funktionierts noch. nun aber wenn ich wieder die 1 auswählen will in der ersten combo, dann erscheint in der 2ten combo auch die 1, jedoch kann ich die zahlen 2-7 immernoch auswählen.
    gibt es eine möglichkeit items aus einer combo wieder zu löschen?

    ich habe es mal mit guicteldelete probiert und dann eine neue combo erstellt. da gehts, jedoch kann ich das nicht benutzen da es dann komplikationen mit anderen sachen gibt.
    danke für eure hilfe ;)

    Einmal editiert, zuletzt von Frayzer (10. August 2008 um 18:25)

  • Machst du das mit Guictrlsetdata?
    Wenn ja dann sette die Box erst auf leer und dann wieder mit den Werten.
    wenn dann noch alle Werte dastehen dann ist es vielleicht ein Variablen Fehler (hatte ich gestern)

  • hier mal mein etwas vereinfachter code^^
    also irgendwie stehen noch werte da..

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)

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

    GUICreate("Hallo", 300, 100)
    $c1 = GUICtrlCreateCombo("", 10, 10, 100)
    For $i = 1 to 7 Step 1
    GUICtrlSetData($c1, $i)
    Next
    $c2 = GUICtrlCreateCombo("", 120, 10, 100)

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

    GUISetState()

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

    GUICtrlSetOnEvent($c1, "_c1")

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

    Func _c1()
    if GUICtrlRead($c1) = "1" Then
    GUICtrlSetData($c2, 1)
    ElseIf GUICtrlRead($c1) = "2" Then
    GUICtrlSetData($c2, 1)
    GUICtrlSetData($c2, 2)
    ElseIf GUICtrlRead($c1) = "3" Then
    GUICtrlSetData($c2, 1)
    GUICtrlSetData($c2, 2)
    GUICtrlSetData($c2, 3)
    ElseIf GUICtrlRead($c1) = "4" Then
    GUICtrlSetData($c2, 1)
    GUICtrlSetData($c2, 2)
    GUICtrlSetData($c2, 3)
    GUICtrlSetData($c2, 4)
    ElseIf GUICtrlRead($c1) = "5" Then
    GUICtrlSetData($c2, 1)
    GUICtrlSetData($c2, 2)
    GUICtrlSetData($c2, 3)
    GUICtrlSetData($c2, 4)
    GUICtrlSetData($c2, 5)
    ElseIf GUICtrlRead($c1) = "6" Then
    GUICtrlSetData($c2, 1)
    GUICtrlSetData($c2, 2)
    GUICtrlSetData($c2, 3)
    GUICtrlSetData($c2, 4)
    GUICtrlSetData($c2, 5)
    GUICtrlSetData($c2, 6)
    ElseIf GUICtrlRead($c1) = "7" Then
    GUICtrlSetData($c2, 1)
    GUICtrlSetData($c2, 2)
    GUICtrlSetData($c2, 3)
    GUICtrlSetData($c2, 4)
    GUICtrlSetData($c2, 5)
    GUICtrlSetData($c2, 6)
    GUICtrlSetData($c2, 7)
    EndIf
    EndFunc

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

    While 1
    Sleep(1000)
    WEnd

    [/autoit]
  • also im moment ist es ja so:
    wenn ich jetzt in der ersten combo die 2 auswähle
    dann kann ich in der 2ten combo die zahlen 1 und 2 auswählen.
    wenn ich in der ersten die 7 auswähle dann kann ich in der 2ten 1-7 auswählen.
    wenn ich danach in der ersten combo die 3 auswähle sollen in der 2ten combo
    nur noch die zahlen 1-3 auswählbar sein, jedoch sind immernoch die zahlen 1-7 in der 2ten vorhanden.

    • Offizieller Beitrag

    Ich glaube, ich verstehe. Du suchst sowas:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include<GuiComboBox.au3>
    Opt("GUIOnEventMode", 1)
    Global $content[8] = [1,2,3,4,5,6,7,8]

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

    $Form1 = GUICreate("Form1", 619, 179, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $Combo1 = GUICtrlCreateCombo("", 40, 24, 241, 25)
    GUICtrlSetOnEvent(-1, "Combo1Change")
    $Combo2 = GUICtrlCreateCombo("", 328, 24, 241, 25)
    GUICtrlSetOnEvent(-1, "Combo2Change")
    $hCombo1 = GUICtrlGetHandle($Combo1)
    $hCombo2 = GUICtrlGetHandle($Combo2)
    GUISetState(@SW_SHOW)

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

    For $i = 0 To UBound($content) -1
    _GUICtrlComboBox_AddString($hCombo1, 'Eintrag ' & $content[$i])
    Next
    _GUICtrlComboBox_SetCurSel($hCombo1, 0)

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

    While 1
    Sleep(100)
    WEnd

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

    Func Combo1Change()
    _GUICtrlComboBox_ResetContent($hCombo2)
    For $i = 0 To $content[_GUICtrlComboBox_GetCurSel($hCombo1)] -1
    _GUICtrlComboBox_AddString($hCombo2, 'Eintrag ' & $content[$i])
    Next
    _GUICtrlComboBox_SetCurSel($hCombo2, 0)
    EndFunc
    Func Combo2Change()

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

    EndFunc
    Func Form1Close()
    Exit
    EndFunc

    [/autoit]
  • Es geht auch ohne die UDF :)
    Du musst nur die 2. Combobox auch jedes Mal neu füllen :) ( Bei GUICtrlSetData als erstes das Trennzeichen | :) )

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    #region - GUI Create
    GUICreate('test')
    $cmb1 = GUICtrlCreateCombo("1",10,10)
    GUICtrlSetData(-1,"2|3|4|5|6|7")
    $cmb2 = GUICtrlCreateCombo("1",10,40)
    GUISetState()
    #endregion

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

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $cmb1
    $zahlen =""
    For $i = 1 To GUICtrlRead($cmb1)
    $Zahlen &= "|" & $i
    Next
    GUICtrlSetData($cmb2,$zahlen,1)
    EndSelect
    WEnd
    #endregion

    [/autoit]