NSIS nsDialog如何检查页面外单选按钮的状态
我试图通过nsDialog创建一个自定义页面,其中包含单选按钮,这些单选按钮将进一步影响某个部分。我遇到的问题是,这些值似乎没有传播到NSIS nsDialog如何检查页面外单选按钮的状态,nsis,nsdialogs,Nsis,Nsdialogs,我试图通过nsDialog创建一个自定义页面,其中包含单选按钮,这些单选按钮将进一步影响某个部分。我遇到的问题是,这些值似乎没有传播到CustomPage功能之外,如下面的示例所示: Var RADIO_APPLE Var RADIO_BANANA Function CustomPage nsDialogs::Create 1018 ${NSD_CreateRadioButton} 0 0 100% 10u "Apple" Pop $RADIO_APPLE ${NSD_Cr
CustomPage
功能之外,如下面的示例所示:
Var RADIO_APPLE
Var RADIO_BANANA
Function CustomPage
nsDialogs::Create 1018
${NSD_CreateRadioButton} 0 0 100% 10u "Apple"
Pop $RADIO_APPLE
${NSD_CreateRadioButton} 0 20 100% 10u "Banana"
Pop $RADIO_BANANA
${NSD_Check} $RADIO_APPLE
nsDialogs::Show
${NSD_GetState} $RADIO_APPLE $0
${NSD_GetState} $RADIO_BANANA $1
MessageBox MB_OK "Apple $0 Banana $1"
FunctionEnd
Section "-CustomSection"
${NSD_GetState} $RADIO_APPLE $0
${NSD_GetState} $RADIO_BANANA $1
MessageBox MB_OK "Apple $0 Banana $1"
SectionEnd
这显然是一个要点,忽略了include和其他页面,但是当我构建这个的完整版本时,我看到了
Apple 1 Banana 0
在自定义页面内弹出的消息框上,但请参见
Apple 0 Banana 0
当区段运行时
我通读了一遍,这个解决方案给了我同样的结果
在本节中,我是否缺少了$RADIO.*
谢谢您不应该在寄存器中存储重要的持久状态,尤其是在$0中,因为它被其他页面和插件使用。例如,components页面在一个回调函数中使用$0
另一方面,您的复选框句柄仅用于该页面,因此您可以使用$1和$2
另一个问题是,在nsDialogs::Show
返回后,不能依赖于读取控制数据。您应该使用leave回调来验证和存储用户输入
!include nsDialogs.nsh
Page Custom MyCreate MyLeave
Page InstFiles
Var Apple
Var Banana
Function .onInit
StrCpy $Banana 1 ; Make banana the default
FunctionEnd
Function MyCreate
nsDialogs::Create 1018
Pop $0
${NSD_CreateRadioButton} 0 0 100% 10u "Apple"
Pop $1
${NSD_CreateRadioButton} 0 20 100% 10u "Banana"
Pop $2
${NSD_SetState} $1 $Apple
${NSD_SetState} $2 $Banana
nsDialogs::Show
FunctionEnd
Function MyLeave
${NSD_GetState} $1 $Apple
${NSD_GetState} $2 $Banana
FunctionEnd
Section "-CustomSection"
MessageBox MB_OK "Apple $Apple Banana $Banana"
SectionEnd