有没有办法清除窗口并重建它?

问题描述 投票:0回答:1

我的应用程序从 .ini 文件动态生成一个带有选项卡、标签、按钮和复选框的 GUI 窗口。我想加载不同的 .ini 文件并重新创建 GUI 窗口,但我找不到任何函数来清除现有窗口。

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
    $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")

EndFunc

Func quit()
    GUIDelete($gui)
    Exit
EndFunc

Func doitButton()
    init('second.ini')
EndFunc

GUISetState(@SW_SHOW,$gui)
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()
开始它可能会完成工作,但应用程序只是挂起。有没有办法清除窗口并重建它?

user-interface autoit
1个回答
0
投票

... 但应用程序只是挂起。

该脚本等待第二个 GUI 上的事件,该 GUI 确实已创建,但未设置为

@SW_SHOW
。取消注释
If $gui Then GUIDelete($gui)
并将
GUISetState(@SW_SHOW,$gui)
移至
init($ini)

© www.soinside.com 2019 - 2024. All rights reserved.