1 (изменено: alexii, 2014-03-20 10:02:01)

Тема: AHK: GUI проблема c неубиваемыми vLabel

У меня в скрипте таймером вызывается функция, создающая GUI и кучу vLabelов из файла такой командой:

guiLabel := "vL" + stringNumber
 Gui, Add, Text,w630 gLaunchSite %guiLabel%, %A_Index%. %jTitle%

Получается окно, где много-много кликабельных надписей, при клике на каждую отправляет на разные адреса.
Проблема - при первом запуске GUI по таймеру все нормально, окно открывается, надписи есть, все правильно кликается и вызывается. Но со второго раза вылазит сообщение Error: The same variable cannot be used for more than one control. Как я понял проблема в том, что GUI нужно уничтожать после использования, для чего добавил секцию в основной скрипт:

GuiClose:
Gui, Destroy
return

Секция вызывается при закрытии GUI, я проверял, т.е. GUI гарантированно уничтожается. Но при следующем запуске GUI по таймеру вылазит эта же ошибка. Т.е. GUI уничтожен, но остаются все vLabelы каким-то образом. Я пробовал уничтожать GUI также в начале самой функции создания GUI до его создания и даже ставить все vLabel в пустое значение через %guiLabel% = "" в цикле, но не помогло. Что еще можно сделать, чтобы избавиться от старых vLabelов?

2

Re: AHK: GUI проблема c неубиваемыми vLabel

Перед созданием GUI нужно его удалять:

Gui, Destroy
guiLabel := "vL" + stringNumber
Gui, Add, Text,w630 gLaunchSite %guiLabel%, %A_Index%. %jTitle%
Как сказал мой дед - Я твой дед

3 (изменено: skyman, 2014-03-20 09:58:54)

Re: AHK: GUI проблема c неубиваемыми vLabel

sergeiplugatyr пишет:

Перед созданием GUI нужно его удалять:

Gui, Destroy
guiLabel := "vL" + stringNumber
Gui, Add, Text,w630 gLaunchSite %guiLabel%, %A_Index%. %jTitle%

Не помогло. Гуи уничтожается, а vLabelы так же остаются. Их даже можно посмотреть в View - Variables окошке у AHK, висят по-прежнему десятками.

L[0 of 0]: 
L1[0 of 0]: 
L10[0 of 0]: 
L11[0 of 0]: 
L12[0 of 0]: 
L13[0 of 0]: 
L14[0 of 0]: 
L15[0 of 0]: 
и т.д.

И ошибка по-прежнему выдается при создании нового GUI.

4

Re: AHK: GUI проблема c неубиваемыми vLabel

Разобрался, строки для vLabel брались из переменной, а она оказалась не локальной для функции, а глобальной, поэтому при каждом запуске старые значения из нее не стирались и дублировались. Решилось обнулением переменной.