Combobox Inhalt einen Wert zuweisen

  • Hallo,

    ich schreibe gerade mein erstes Autoit Programm (abgesehen von Hallo Welt).
    Möchte ein Infotool für mein Arbeit bauen.

    Nun habe ich mir eine Combobox gebaut, in dieser Liste ich unsere ganzen Maschinen auf.
    Wenn man nun eine Maschine anklickt soll ein Label die Maschinennummer ausgeben.

    Habe per Suchfunktion folgende Seite gefunden:
    Combobox

    Ich "glaube" auch den Code zu verstehen:

    AutoIt
    Func _comboread()
    	$read = GUICtrlRead($combo)
    	If $read = "item1" Then MsgBox(0, "Combobox", $read)
    	If $read = "item2" Then MsgBox(0, "Combobox", $read)
    EndFunc

    Es wird eine Funktion erzeugt die sich comboread nennt.
    Eine Variable namens read wird erzeugt in der gesagt wird er soll die Combobox lesen
    Wenn er dann den Wert 1 gelesen hat soll er eine MsgBox öffnen und den Wert wiedergeben.

    Ich wollte nun das er ein Label überschreibt anstelle der MsgBox und habe das so probiert:

    AutoIt
    Func _comboread()
    	$read = GUICtrlRead($Combo1)
    	If $read = "SGM 35" Then GUICtrlSetData($Label8, "124221")
    EndFunc


    Leider wird da aber nichts überschrieben wenn ich SGM 35 anklicke.

    Anbei mal noch der gesamte Code, das meiste ist halt GUI-Zeug:

    Spoiler anzeigen


    Kann mir eventuell jemand sagen was ich falsch mache?

    Vielen Dank im voraus!

  • Ahh cool, Danke Dir vielmals.
    Freut mich ja direkt das der Rest richtig ist 8o , hätte ich jetzt nicht erwartet.

    Also erkannte er die Änderung nicht weil Sie nicht in der Schleife mit drin stand?
    Die Schleife läuft immer im Kreis und jetzt wird alle paar Millisekunden (oder wieviel auch immer) die Funktion gecheckt und entsprechend reagiert?


    Was die Arrays anbelangt, das ist mir alles noch zu hoch.
    Sobald ich das kann schreibt ich das Tool neu :) .

    Ich dachte mir ich fang mal mit einem kleinen Rechentool an, ist jetzt doch etwas ausgeartet.
    Nun möchte ich es aber auch zu Ende bringen.

    Edit:
    Schon das nächste Problem:

    AutoIt
    If $read = "SGM 35" Then GUICtrlSetData($Label8, "124221")

    Das klappt ja nun einwandfrei.
    Was muss ich den tun wenn ich bei SGM 35 mehrere Labels ändern lassen möchte.

    Hab jetzt sicher 10 Sachen versucht:

    AutoIt
    If $read = "SGM 35" Then GUICtrlSetData($Label8, "124221") And ($Label6, "Deutschland")
    
    
    If $read = "SGM 35" Then GUICtrlSetData($Label8, "124221" $Label6, "Deutschland")
    
    
    If $read = "SGM 35" Then GUICtrlSetData($Label8, "124221") And GUICtrlSetData($Label6, "Deutschland")
    
    
    If $read = "SGM 35" Then GUICtrlSetData($Label8, "124221"($Label6, "Deutschland"))


    Und noch weitere versuche... Nichts funktioniert davon.
    Ich finde hier in der Hilfe im Moment nur dieses Beispiel , leider nur für 1 Control.

    Es sind immer die Kleinigkeiten an denen man hängen bleibt ;(

    2 Mal editiert, zuletzt von elysium (3. Februar 2016 um 16:52)

  • Zu Arrays (hatte da grad vor kurzem zusammengefasst, wie sie funktionieren):
    2D Array erstellen

    Zum ändern von mehreren:

  • Erst Mal vielen lieben Dank!

    Dann war mein Fehler das ich es in eine Zeile gepackt habe und mich wohl zu sehr auf das "And" fixiert habe.
    Ohne das "And" einen Zeilenumbruch und ein "EndIf" hätte ich es gehabt (sowas ärgert) 8| .

    Hab gerade was ans Forum gespendet für die nette Hilfe!
    Nicht viel, bin aber gerne bereit das dafür in regelmäßigen Abständen zu tun.

  • Ne, dort fehlen dann die Grundlagen. Die solltest du dir noch genauer ansehen.
    Funktionen haben Parameter. Damit werden sie aufgerufen.
    GuiCtrlSetData hat als Parameter das Control als ersten und als 2ten Parameter den Text. Es gibt noch einen optionalen Parameter (den in []), den kann man aber weglassen. Dadurch wird dort ein Standartwert gesetzt.
    Parameter müssen übergeben werden. Genau das, was dort verlangt wird.
    GuiCtrlSetData verlangt eine Control-ID und einen String. NIcht mehr und nicht weniger. Wenn man mehrere Dinge ändern will muss man die Funktion mehrmals aufrufen. Für jedes Control einzeln.
    Eine Funktion ist eigentlich nichts anderes, als wenn man den Quellcode der Funktion an die Stelle setzt, nur dass dort ein eigener Variablen-Raum existiert und die übergebenen Variablen verfügbar sind (Globale natürlich auch).

    Mit dem AND hätte man theoretisch so arbeiten können:
    If $read = "SGM 35" and GUICtrlSetData($Label8, "124221") and GUICtrlSetData($Label6, "Deutschland") then MsgBox(48,"Info","Hurra")
    Bei And wird die erste Bedingung geprüft. Trifft die zu, wird die nächste geprüft. Ist die erste Bedingung aber false, dann wird der rest garnicht mehr geprüft, also auch nicht ausgeführt. Alle Rückgaben <>0 sind true. GuICtrlSetData gibt 1 zurück, wenn sie erfolgreich den Text ändern konnte. Somit kannst du das auch so lösen. Ist halt unschöner Stil.