我试图通过nsDialog创建一个自定义页面,其中的单选按钮会影响到后面的部分。 我遇到的问题是,这些值似乎并没有传播到超越了 CustomPage
funtion,见下面的例子。
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
这显然是一个要点,忽略了包括和其他页面, 但是当我建立完整版的时候,我看到的是:
Apple 1 Banana 0
在里面的留言箱上 CustomPage
但见
Apple 0 Banana 0
节运行时。
我读过 https:/nsis.sourceforge.ioNsDialogs_FAQ#如何轻松处理radiobutton_selections。 而这个解决方案给我同样的结果。
是否有什么我缺少的东西,使 $RADIO_*
可在该栏目中使用?
谢谢你
你不应该在寄存器中存储重要的长期状态,特别是在$0中,因为它被其他页面和插件使用。例如,组件页面在一个回调函数中使用了$0。
而你的复选框句柄则只在该页面使用,所以你可以使用1元和2元。
另一个问题是,你不能依靠读取控制数据后的 nsDialogs::Show
返回。你应该使用离开回调来验证和存储用户的输入。
!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