Angeblich Variable zweimal verwendet

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Meister Lampe
Posts: 228
Joined: 06 Apr 2014, 13:28

Angeblich Variable zweimal verwendet

22 Aug 2018, 16:41

Hallo Zusammen!

Ich bin gerade dabei, eine Gui zu erstellen. Eigentlich sieht die schon ganz gut aus. Aber jedesmal, wenn ich sie nach einem Reloaded zum zweiten Mal öffne (die Gui ist noch unabhängig von der Anwendung dahinter), bekomme ich die Fehlermeldung "Error: The same Variable cannot be used for more than one control" mit genauer Zeilenangabe. Dort steht aber nur folgendes:

Code: Select all

Gui,1: Add, Edit, cRed    x20    y90     h20   w80      vBestand, %FilmSign%
Die Variable "Bestand" wird nirgenswo anders unerlaubt verwendet. Und ich habe schon einmal probiert, sie umzubenennen, indem ich Bestand_1 daraus gemacht habe, aber das gab genau dieselbe Fehlermeldung mit dem Verweis auf dieselbe Zeile.

Ich habe keine Ahnung, woran das liegen könnte.

Viele Grüße von Meister Lampe
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Angeblich Variable zweimal verwendet

22 Aug 2018, 17:34

Wenn du GUI, Add aufrufst fügst du eine neue Komponente hinzu.
Wenn du deinen Code der deine GUI erzeugt zweimal aufrufst fügst du auch 2 unterschiedliche Button mit dem selben namen hinzu.
Das würde zu deinem Fehler führen.

Die Lösung ->
Die GUI beim schließen per GUI, Destroy "kaputt machen"
Den Code der deine GUI erzeugt nur einmal aufrufen und danach nur noch per GUI, Show anzeigen lassen.
Recommends AHK Studio
User avatar
Meister Lampe
Posts: 228
Joined: 06 Apr 2014, 13:28

Re: Angeblich Variable zweimal verwendet

30 Aug 2018, 15:46

Hallo nnik!

Vielen Dank, das hat geholfen. Ich habe dann gemerkt, daß ich den Code für die Gui ganz oben in das Script einfügen muß, damit sie gleich beim Starten erzeugt wird.
Jetzt habe ich aber ein noch ein anderes, eher das umgekehrte Problem: Wie schließe ich die wieder?
Ich habe zwie Buttons, einen zum weiteren Ausführen des Programms, einen zum Abbrechen (die MsgBoxes sind erstmal zum Ausprobieren des Ablaufs).

Code: Select all

SIGNIEREN:
Gui,1: Submit  ; Speichert die Benutzereingaben in die entsprechenden Steuerelementvariablen.
MsgBox Gleich geht es weiter...!
return
Das läuft gut, die Gui schließt sich und die in ihr eingegebenen Parameter werden abgespeichert.

Code: Select all

ABBRECHEN:
Gui,1: GuiClose
MsgBox Jetzt wird Schluß gemacht!
return
Hiermit bekomme ich das Ding aber nicht zu, sondern nur eine Fehlermeldung. Wenn ich in diesem zusammenhang ExitApp verwende, schließt es mir gleich das ganze Script, was ich ja auch nicht will.
Wie also beende/schließe ich die Gui und den Programmablauf ohne Variablenabspeicherung? Genauer: Der eigentliche Programmablauf fängt ja hier erst an, da er ja durch den anderen Button aufgerufen werden soll.

Viele Grüße von Meister Lampe
gregster
Posts: 9000
Joined: 30 Sep 2013, 06:48

Re: Angeblich Variable zweimal verwendet

30 Aug 2018, 17:45

GuiClose ist gar kein "Subcommand" von GUI. Stattdessen hat nnnik dir bereits Gui, Destroy ans Herz gelegt (https://autohotkey.com/docs/commands/Gui.htm#Destroy). Wie sieht's damit aus? Dann musst du die GUI allerdings bei Befarf neu erzeugen.
Um sie dagegen nur auszublenden - wie nach Gui, Submit, aber ohne Speichern der Variablen - verwendet man Gui, Hide.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Angeblich Variable zweimal verwendet

31 Aug 2018, 00:53

Eigentlich würde ich niemandem Gui, Destroy ans Herz legen - außer man will das Programm beenden.
Recommends AHK Studio
gregster
Posts: 9000
Joined: 30 Sep 2013, 06:48

Re: Angeblich Variable zweimal verwendet

31 Aug 2018, 01:03

nnnik wrote:Eigentlich würde ich niemandem Gui, Destroy ans Herz legen - außer man will das Programm beenden.
Das kommt ganz auf das Programm an. Sobald eine Gui sicher (oder sehr wahrscheinlich) nicht mehr gebraucht wird, macht es keinen Sinn, sie zu behalten. Bei einem eher sequentiell ablaufenden Programm ist mehr als ein Gui-Fenster nicht ungewöhnlich, ohne dass man zurückspringen würde.
Ich habe mir allerdings Meister Lampe's Aufgabenstellung nicht wirklich angesehen, und daher auch auf Hide verwiesen.

Das Beenden des Programms "destroyt" sowieso alle verbleibenden Guis automatisch. Gerade dann sähe ich keinen großen Zusatznutzen für dieses Subcommand.
User avatar
Heloo1982
Posts: 30
Joined: 12 Jan 2017, 07:39

Re: Angeblich Variable zweimal verwendet

31 Aug 2018, 07:57

Anstatt Gui, destroy hab ich gute Erfahrungen mit Gui, New gemacht.

Code: Select all

F2::
Gui,1: New,,
Gui,1: Show, w100 h100,
Gui,1: Add, Edit, cRed h20   w80 vBestand, %FilmSign%
Return
Damit wird die Gui jedesmal neu aufgebaut und Variablen werden auch neu vergeben, damit hab ich bei mit die Fehlermeldung "Error: The same Variable cannot be used for more than one control" komplett eliminiert.
User avatar
Meister Lampe
Posts: 228
Joined: 06 Apr 2014, 13:28

Re: Angeblich Variable zweimal verwendet

31 Aug 2018, 17:05

Hallo Heloo!

Vielen Dank, das war eine gute Empfehlung!
Es sollen sich ja bei jedem neuen Aufruf, abhängig von der beim letzten Mal vorgenommenen Einstellungen, die in denTextfeldern vorgegebenen Parameter ändern. Das geht nur, wenn die Gui jedesmal neu geladen wird.

Viele Grüße von Meister Lampe

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 35 guests