0

在我的 MUI 组件页面上,当用户试图离开该页面时,我会调用一个函数。在该函数中,我试图查看至少检查了 1 个组件。如果没有,那么我会显示一个 MessageBox 并中止(停止继续到下一页)。

我的问题:我的函数总是说即使没有检查组件。我究竟做错了什么?

出于某种原因,程序总是认为第一个组件被检查/选择,而不是?

!include nsdialogs.nsh
!include MUI2.nsh

!define MUI_PAGE_CUSTOMFUNCTION_SHOW  compshow
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE compleave

!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_LANGUAGE "English"

OutFile "test.exe"

Function compshow

FunctionEnd

Function compleave

    !insertmacro SectionFlagIsSet ${section1} ${SF_SELECTED} +1 +2
    MessageBox MB_OK "Component Selected"
    MessageBox MB_OK "Component NOT Selected"

FunctionEnd


Section "Dummy1"

SectionEnd

Section "Dummy2"

SectionEnd
4

1 回答 1

1

你的问题是相对跳跃。您应该使用一些标签,因为宏可能包含许多命令,而不仅仅是一个。

另外,认为执行将在第一次跳转后继续。不要忘记跳过测试的另一个分支。

修改后的compleave回调按您的预期工作:

Function compleave

    !insertmacro SectionFlagIsSet ${section1} ${SF_SELECTED} selected not_selected
    selected:
    MessageBox MB_OK "Component Selected"
    goto end
    not_selected:
    MessageBox MB_OK "Component NOT Selected"
    end:

FunctionEnd
于 2012-08-27T11:55:08.940 回答