Мое приложение динамически генерирует окно графического интерфейса с вкладками, метками, кнопками и флажками из файла .ini. Я хочу загрузить другой файл .ini и воссоздать окно графического интерфейса, но не могу найти функцию для очистки существующего окна.
Opt('GUIOnEventMode', 1) ; use events instead of loop
AutoitSetOption('ExpandVarStrings',1) ; enable ' … $var$ … '
Global $gui
Global $buttons[]
init('first.ini')
Func init($ini)
; If $gui Then GUIDelete($gui) ; deletes gui, but won’t re-create
If $gui Then GUIDelete($gui) ; actually, this is OK
$gui = GUICreate('Test', 200, 160)
GUISetOnEvent(-3, 'quit') ; quit on close
Local $tabControl = GUICtrlCreateTab(10, 10, 180, 100)
Local $sectionNames = IniReadSectionNames($ini)
For $i = 1 to $sectionNames[0]
Local $section = $sectionNames[$i]
Local $values = IniReadSection($ini, $section)
Local $tab = GUICtrlCreateTabItem($section)
For $j = 1 to $values[0][0]
GUICtrlCreateButton($values[$j][0], 20, 20+$j*20)
Next
Next
GUICtrlCreateTabItem("")
GUISwitch($gui)
Local $button = GUICtrlCreateButton('Doit', 20, 120)
GUICtrlSetOnEvent($button, "doitButton")
GUISetState(@SW_SHOW,$gui) ; show gui (moved from below)
EndFunc
Func quit()
GUIDelete($gui)
Exit
EndFunc
Func doitButton()
init('second.ini')
EndFunc
; GUISetState(@SW_SHOW,$gui) ; delete from here
While 1
Sleep(1)
WEnd
GUIDelete($gui)
INI-файлы:
; first.ini
[Fruit]
Apple=1
Banana=2
[Animals]
Aardvark=1
и
; second.ini
[Instruments]
Accordion=1
Banjo=2
Cor Anglais=3
Я думал, что GUICreate() заменит окно, но это не так. Затем я подумал, что если я начну с GUIDelete(), возможно, это сработает, но приложение просто зависает. Есть ли способ очистить окно и восстановить его?
Редактировать Благодаря ответу @user4157124 ниже я добавил изменения в приведенный выше код с комментариями.
… но приложение просто зависает.
Скрипт ожидает событий во втором графическом интерфейсе, который создается, но для него не установлено значение @SW_SHOW
. Раскомментируйте If $gui Then GUIDelete($gui)
и переместите GUISetState(@SW_SHOW,$gui) в init($ini)
.