Gui nach Änderung an Combobox updaten

  • Hallo zusammen,

    nachdem die SuFu versagt hat, hier nun mein Problem.

    Ich habe ein Gui, in der sich eine ComboBox befindet. Wenn sich der Inhalt dieser durch Auswahl ändernt möchte ich die Gui bzw eine Inputbox aktualisieren.

    Wie fange ich dieses Ereignis der ComboBox Änderung ab?

  • Wie meinst du das mit aktualisieren?

    Ich hab dir einfach mal ein Skript gemacht, mit dem man durch eine Combobox den Text einer Inputbox und durch die andere die Inputbox anzeigen und ausblenden kann.

    Spoiler anzeigen
    [autoit]

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

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

    $Gui = GUICreate("Form1", 161, 101, 194, 126)
    $Input = GUICtrlCreateInput("Abc", 8, 40, 145, 21)
    GUICtrlSetState(-1, $GUI_HIDE)
    $Combo = GUICtrlCreateCombo("Input nicht Anzeigen", 8, 8, 145, 25) ;Anzeigen/ Nicht anzeigen
    GUICtrlSetData(-1, "Input Anzeigen")
    $Combo_text = GUICtrlCreateCombo("Text der Combobox", 8, 72, 145, 25) ;Text verändern
    GUICtrlSetData(-1, "Abc|Lol|Text")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo
    If GUICtrlRead($Combo) = "Input Anzeigen" Then
    GUICtrlSetState($Input, $GUI_SHOW)
    Else
    GUICtrlSetState($Input, $GUI_HIDE)
    EndIf
    Case $Combo_text
    $Text = GUICtrlRead($Combo_text)
    If $Text <> "Text der Combobox" Then
    GUICtrlSetData($Input, $Text)
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    MfG xXTobi93Xx

  • Hallo Masterciw,

    suchst du soetwas?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $menu1, $n1, $n2, $n3, $msg, $menustate, $menutext

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

    GUICreate("My GUICtrlRead") ; will create a dialog box that when displayed is centered

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

    $menu1 = GUICtrlCreateMenu("File")

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

    $n1 = GUICtrlCreateCombo("Bitte einen Eintrag auswählen", 10, 10) ; create first item
    GUICtrlSetData(-1, "Eintrag 1|Eintrag 2|Eintrag 3") ; add other item
    $n2 = GUICtrlCreateInput("", 10, 80, 50)
    $n3 = GUICtrlCreateButton("Read", 10, 110, 50)
    GUICtrlSetState(-1, $GUI_FOCUS) ; the focus is on this button

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

    GUISetState() ; will display an empty dialog box
    ; Run the GUI until the dialog is closed
    Do
    $msg = GUIGetMsg()
    Switch $msg
    Case $n1
    GUICtrlSetData($n2, GUICtrlRead($n1)) ; display the selected listbox entry in the input
    Case $n3
    $menustate = GUICtrlRead($menu1) ; return the state of the menu item
    $menutext = GUICtrlRead($menu1, 1) ; return the text of the menu item
    MsgBox(0, "State and text of the menuitem", "state:" & $menustate & @LF & "text:" & $menutext)
    EndSwitch
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example

    [/autoit]

    mfg (Auto)Bert

  • Hallo danke erstmals,

    kann dazu noch kein Script posten, weil es noch nicht wirklich existiert. Das letzte Beispiel kommt aber schon nahe an das gewünschte ran.

    Ich möchte quasi abfangen wenn ich in der Combobox eine Änderung gemacht (z.B. durch runterklappen des Dropdowns und selektieren eines Eintrages) habe und diesen Wert dann in der Inputbox anzeigen.

    Hoffe das bringt ein wenig mehr Klarheit in die Angelegenheit. Vielen Dank bereits im Voraus für Eure Hilfe

  • Hatte ich in meinem Beitrag drin. Ich hab dir mal das an- und ausblenden entfernt.

    Spoiler anzeigen
    [autoit]

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

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

    $Gui = GUICreate("Gui", 160, 70, 194, 126)
    $Combo_text = GUICtrlCreateCombo("Text der Combobox", 8, 8, 145, 25) ;Text verändern
    GUICtrlSetData(-1, "Abc|Lol|Text")
    $Input = GUICtrlCreateInput("Abc", 8, 40, 145, 21)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo_text
    $Text = GUICtrlRead($Combo_text)
    If $Text <> "Text der Combobox" Then
    GUICtrlSetData($Input, $Text)
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    MfG xXTobi93Xx

  • Hallo Community,

    erst mal vielen Dank für Euren zahlreichen Tips. Habe das ein oder andere bereits erfolgreich umgesetzt und nun wieder neue Probleme mit dem ganzen. Dies ist mein erstes Mal das ich mich Arrays arbeite und vielleicht denke ich nur ein wenig zu kompliziert oder ich versuche was unmögliches.

    Hier mal mein bisheriger Code.

    Spoiler anzeigen

    #cs Aufbau der Datei template_notes.ini im templates
    [Notes]
    KitType=1
    KeyFilename
    CertificateExpChecked
    MailFile
    Location
    MailServer
    #ce

    #cs Aufbau der ViewServerPath.csv im templates Ordner
    Dummyserver1/Test/DE - Mail;Dummyserver1;test/mail
    Dummyserver1/Test/DE - Mail1;Dummyserver1;test/mail1
    Dummyserver1/Test/DE - Mail2;Dummyserver1;test/mail2
    Dummyserver1/Test/DE - Mail3;Dummyserver1;test/mail3
    Dummyserver1/Test/DE - Mail4;Dummyserver1;test/mail4
    Dummyserver1/Test/DE - Mail5;Dummyserver1;test/mail5
    Dummyserver2/Test/DE - Mail;Dummyserver2;test/mail
    Dummyserver2/Test/DE - Mail1;Dummyserver2;test/mail1
    Dummyserver2/Test/DE - Mail2;Dummyserver2;test/mail2
    Dummyserver2/Test/DE - Mail3;Dummyserver2;test/mail3
    Dummyserver2/Test/DE - Mail4;Dummyserver2;test/mail4
    Dummyserver2/Test/DE - Mail5;Dummyserver2;test/mail5
    Dummyserver3/Test/DE;Dummyserver3;prod/mail1
    Dummyserver4/Test/DE;Dummyserver4;prod/mail2
    Dummyserver5/Test/DE;Dummyserver5;prod/mail3
    Dummyserver6/Test/DE;Dummyserver6;prod/mail4
    Dummyserver7/Test/DE;Dummyserver7;prod/mail5
    Dummyserver8/Test/DE;Dummyserver8;prod/mail6
    Dummyserver9/Test/DE;Dummyserver9;prod/mail7
    Dummyserver10/Test/DE;Dummyserver10;prod/mail8
    #ce

    ; Includes definieren
    #include <File.au3>
    #include <GuiComboBoxEx.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>

    ; Hauptprogramm aufrufen
    _Main()

    ; Hier beginnt das Hauptprogramm
    Func _Main()

    ; Variablen deklarieren
    Dim $answer
    Dim $answer1
    Dim $Eingabe
    Dim $file
    Dim $fileNew
    Dim $i
    Dim $line
    Dim $iMailServerPath
    Dim $arMailServerPath[50][3]
    Dim $MailServerPath
    Dim $MailView
    Dim $MailServer
    Dim $MailPath
    Dim $Combo1
    Dim $mailanswer
    Dim $a
    Dim $MailServer
    Dim $mailserveranswer

    ; Hier beginnt die Definition der Gui des Programmes
    $Form1 = GUICreate("", 630, 370, 192, 114)
    $Label1 = GUICtrlCreateLabel("Geben Sie hier die Notes UserID ein", 8, 110, 175, 17)
    $Input1 = GUICtrlCreateInput("emustermann", 8, 125, 617, 21)
    $Label2 = GUICtrlCreateLabel("Geben Sie den kompletten Vor- und Zunamen des Anwenders ein", 8, 155, 314, 17)
    $Input2 = GUICtrlCreateInput("Elke Mustermann", 8, 170, 617, 21)
    $Label3 = GUICtrlCreateLabel("Wählen Sie hier den Mailserver aus", 8, 200, 171, 17)
    $Combo1 = GUICtrlCreateCombo("Dummyserver", 8, 215, 617, 325)
    $Label4 = GUICtrlCreateLabel("Hier wird der Pfad zum Mailfile angezeigt !", 8, 245, 252, 17)
    $Input3 = GUICtrlCreateInput("", 8, 260, 617, 21)
    $Button1 = GUICtrlCreateButton("INI erstellen", 8, 290, 289, 73, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Programm beenden", 336, 290, 289, 73, $WS_GROUP)
    GUISetState(@SW_SHOW)

    ; Hier wird die Mailserver.ini in die ComboBox ausgelesen
    $iMailServerPath = "templates\ViewServerPath.csv"

    If (Not IsArray($iMailServerPath)) And (@error = 1) Then
    MsgBox(0, "", "ViewServerPath.csv wurde nicht gefunden.")
    Exit
    EndIf

    _FileReadToArray($iMailServerPath, $arMailServerPath)

    ; Diese Schleife wird durchlaufen bis die letze Zeile in der Combobox eingelesen wurde
    For $i = 1 To UBound($arMailServerPath) - 1
    $arMailServer = StringSplit($arMailServerPath[$i], ";", 1)
    GUICtrlSetData($Combo1, $arMailServer[1])
    ; Hiermit wird die Vorgabe der Combobox auf den ersten Eintrag festgelegt
    ; GUICtrlSetData($Combo1, "Dummyserver")
    $arMailPath = StringSplit($arMailServerPath[$i], ";", 1)
    GUICtrlSetData($Input3, $arMailPath[3])
    Next

    Do
    $msg = GUIGetMsg()
    Switch $msg
    Case $Combo1
    GUICtrlSetData($Input3, GUICtrlRead($Combo1))
    Case $Button1
    _Button1()
    Case $Button2
    _Button2()
    EndSwitch
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>_Main

    Func _Button1()
    MsgBox(0, "Button1", "Button 1 wurde gedrückt", 2)
    ; Noch nicht weiter definiert
    EndFunc ;==>_Button1

    Func _Button2()
    ; MsgBox(0, "Button2", "Button 2 wurde gedrückt", 2)
    Exit
    EndFunc ;==>_Button2

    Die notwendigen Dateien, die in dem Skriptunterordner templates liegen soll habe ich in das Script eingebunden.Als erstes ist dies mein erster Versuch eine CSV Datei in ein Array und dann weiter in eine Combobox einzulesen. Muss die CSV Datei irgendeinen bestimmten Separator haben. In ihr wurden jeweils die Ansicht, der hinterlegte Server und der Pfad zum Mailfile hinterlegt und mit Semikolons getrennt.

    Das Programm soll die CSV Datei in ein mehrdimensionelles Array lesen und dann soll der jeweils erste Eintrag (Ansicht) in die Combobox geladen werden. Als Standardeintrag soll in der Combobox dann der erste Eintrag hinterlegt sein. Desweiteren soll in der Inputbox $Input3 dann der richte Mailpaf aus der CSV Datei hinterlegt werden. Das funktioniert aber noch nicht. Desweiteren soll die Möglichkeit bestehen bei Änderung der Comboboxauswahl die Inputbox Input3 zu ändern und diese soll auch evtl händisch änderbar sein.

    Bei Druck auf Button1 (INI erstellen) soll dann überprüft werden was in der Combobox (Ansicht)ausgewählt wurde und der entsprechende Server im Array in eine Variablen hinterlegt werden. Desweitern soll der Mailpfad aus $Input3 in einer weiteren Variablen zugewiesen werden (hierbei ist wichtig das dieser evtl händisch geändert werden kann.)

    Die Frage ist nun was ich falsch mache. Bin für positive Kritik gerne zu haben. Blicke es derzeit noch nicht besser, habe auch schon viel dazu gelernt und erfreue mich jeden Tag aufs neue über diese tolle Möglichkeiten der Programmierung.

    Danke für Eurer Feedback