NSIS nsDialog 如何在页面外查看RadioButton的状态?

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

我试图通过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_* 可在该栏目中使用?

谢谢你

nsis nsdialogs
1个回答
1
投票

你不应该在寄存器中存储重要的长期状态,特别是在$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
© www.soinside.com 2019 - 2024. All rights reserved.