ComboBox2 inhalt abhäning von Combobox1

  • Hey

    Als ich habe eine kleine frage,

    wenn ich 2 Comboboxen habe ComboBox1 und ComboBox2 ist es da möglich das sicht je nach ausgewehltem item in der ComboBox1 sich die auszuwälenden Items in der ComboBox2 ändern ?

    MfG TonySiat

    Einmal editiert, zuletzt von TonySiat (30. Dezember 2010 um 00:54)

  • Das geht z.B. so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIComboBox.au3>

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

    Global $aCombo[11][2]
    $aCombo[0][0] = 10

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

    For $i = 1 To $aCombo[0][0]
    $aCombo[$i][0] = Chr($i + 64)
    $aCombo[$i][1] = $aCombo[$i][0] & 1 & "|" & $aCombo[$i][0] & 2 & "|" & $aCombo[$i][0] & 3
    Next

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

    $hWnd = GUICreate("Test", 200, 55)
    $cCombo1 = GUICtrlCreateCombo("", 5, 5, 190, 25)
    $cCombo2 = GUICtrlCreateCombo("", 5, 30, 190, 25)
    GUISetState()

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

    _GUICtrlComboBox_BeginUpdate($cCombo1)
    For $i = 1 To $aCombo[0][0]
    _GUICtrlComboBox_AddString($cCombo1, $aCombo[$i][0])
    Next
    _GUICtrlComboBox_EndUpdate($cCombo1)

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

    $iLastSel = -1

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    $iCurSel = _GUICtrlComboBox_GetCurSel($cCombo1)
    If $iCurSel <> $iLastSel Then
    GUICtrlSetData($cCombo2, "")
    GUICtrlSetData($cCombo2, $aCombo[$iCurSel + 1][1])
    $iLastSel = $iCurSel
    EndIf
    WEnd

    [/autoit]
  • Danke...

    Ist aufjedemfall das was ich wollte muss es nur noch verstehen da bin ich aba grade drann
    villt frage ich hier noch mal gleich was.....


    MfG TonySiat

  • Hallo TonySiat,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und hier noch ein Besispielskipt dass zu deiner Fragestellung passt:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #AutoIt3Wrapper_Add_Constants=n
    #include <Date.au3>

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

    $Form1 = GUICreate("2 Combos",200,150)
    $cbo1 = GUICtrlCreateCombo("",5,5,190)
    GUICtrlSetData($cbo1,"Täglich")
    GUICtrlSetData($cbo1,"Wöchentlich")
    GUICtrlSetData($cbo1,"Monatlich")
    GUICtrlSetData($cbo1,"Jährlich")
    $cbo2 = GUICtrlCreateCombo("",5,45,190)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    case $Gui_Event_Close
    Exit
    case $cbo1
    $sCbo1 = GUICtrlRead($cbo1)
    GUICtrlSetData($cbo2,"","")
    Switch $sCbo1
    Case "Täglich"
    $sCbo2 = ""
    for $i = 9 to 17
    $sCbo2 &= $i & " Uhr"
    If $i < 17 Then $sCbo2 &= "|"
    Next
    GUICtrlSetData($cbo2,$sCbo2,"9 Uhr")
    Case "Wöchentlich"
    $sCbo2 = ""
    for $i = 1 to 7
    $sCbo2 &= _Locale_DayName($i)
    If $i < 7 Then $sCbo2 &= "|"
    Next
    GUICtrlSetData($cbo2,$sCbo2,_Locale_DayName(1))
    case "Monatlich"
    $sCbo2 = ""
    for $i = 1 to 5
    $sCbo2 &= $i & ". Woche"
    If $i < 5 Then $sCbo2 &= "|"
    Next
    GUICtrlSetData($cbo2,$sCbo2,"1. Woche")
    case "Jährlich"
    $sCbo2 = ""
    for $i = 1 to 12
    $sCbo2 &= _Locale_MonthName($i)
    If $i < 12 Then $sCbo2 &= "|"
    Next
    GUICtrlSetData($cbo2,$sCbo2,_Locale_MonthName(@MON))
    EndSwitch
    EndSwitch
    WEnd

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

    Func _Locale_MonthName($Month, $Abbrev = False)
    ; ==========================================================================================
    ; Autor: Großvater (http://www.autoit.de)
    ; Parameter:
    ; $Month - Nummer des Monats (1 - 12)
    ; $Abbrev - abgekürzten Namen liefern:
    ; |0 : nein
    ; |1 : ja
    ; ==========================================================================================
    Local Const $LOCALE_USER_DEFAULT = 0x0400
    Local Const $LOCALE_SMONTHNAME = 0x37
    Local Const $LOCALE_LOCALE_SABBREVMONTHNAME = 0x43
    Local $LCType = $LOCALE_SMONTHNAME
    If $Abbrev Then $LCType = $LOCALE_LOCALE_SABBREVMONTHNAME
    If Not StringIsInt($Month) Or $Month < 1 Or $Month > 12 Then Return False
    Local $aResult = DllCall("Kernel32.dll", "Int", "GetLocaleInfoA", _
    "UInt", $LOCALE_USER_DEFAULT, _
    "UInt", $LCType + $Month, _
    "Str", "", _
    "Int", 255)
    If @error Or $aResult[0] = 0 Then Return False
    Return $aResult[3]
    EndFunc

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

    Func _Locale_DayName($WDay, $Abbrev = False)
    ; ==========================================================================================
    ; Autor: Großvater (http://www.autoit.de)
    ; Parameter:
    ; $WDay - Nummer des Wochentages (1 - 7) (!!! 1 ist Montag (s.u.) !!!)
    ; $Abbrev - abgekürzten Namen liefern:
    ; |0 : nein
    ; |1 : ja
    ; Anmerkungen:
    ; Zu meinem Erstaunen hat MS in WinNLS.h folgende Konstanten definiert:
    ; #define LOCALE_SDAYNAME1 0x0000002A // long name for Monday
    ; ...
    ; #define LOCALE_SDAYNAME7 0x00000030 // long name for Sunday
    ; Anders als beim Macro @WDAY gilt deshalb der Montag als Tag 1 und der Sonntag
    ; als Tag 7. Der passende Wert lässt sich per Aufruf der UDF-Funktion
    ; _DateToDayOfWeekISO()
    ; ermitteln.
    ; ==========================================================================================
    Local Const $LOCALE_USER_DEFAULT = 0x0400
    Local Const $LOCALE_SDAYNAME = 0x29
    Local Const $LOCALE_SABBREVDAYNAME = 0x30
    Local $LCType = $LOCALE_SDAYNAME
    If $Abbrev Then $LCType = $LOCALE_SABBREVDAYNAME
    If Not StringIsInt($WDay) Or $WDay < 1 Or $WDay > 7 Then Return False
    Local $aResult = DllCall("Kernel32.dll", "Int", "GetLocaleInfoA", _
    "UInt", $LOCALE_USER_DEFAULT, _
    "UInt", $LCType + $WDay, _
    "Str", "", _
    "Int", 255)
    If @error Or $aResult[0] = 0 Then Return False
    Return $aResult[3]
    EndFunc

    [/autoit]

    PS.: wenn eine Problem gelöst ist ist es gut ihn den Thread auch auf gelöst zu setzten. Einfach 1. Beitrag bearbeiten, Präfix (nähe Überschrift) ändern und speichern (absenden)

    mfg autoBert

  • Vielen dank für die Nette Begrüßung und danke für Das Skript

    das Problem is jetzt gelöst doch jetzt steh ich fohr dem Nächsten hinterniss ^^ (einfach zu viele kombinatzionen 105 If bediungen schon n zahl) :)

    MfG Tevi