【问题标题】:NSIS nsDialog How to check status of a RadioButton outside of pageNSIS nsDialog如何检查页面外单选按钮的状态
【发布时间】:2020-05-13 15:59:01
【问题描述】:

我正在尝试通过 nsDialog 创建一个自定义页面,其中的单选按钮会影响后续部分。我遇到的问题是这些值似乎没有传播到 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

这显然是一个要点,忽略了包含和其他页面,但是当我构建它的完整版本时,我看到了

Apple 1 Banana 0

CustomPage 内部提出的消息框上,但请参阅

Apple 0 Banana 0

该部分何时运行。

我已经阅读了https://nsis.sourceforge.io/NsDialogs_FAQ#How_to_easily_handle_radiobutton_selections,这个解决方案给了我同样的结果。

我是否缺少使$RADIO_* 在该部分中可用的内容?

谢谢

【问题讨论】:

    标签: nsis nsdialogs


    【解决方案1】:

    您不应该将重要的持久状态存储在寄存器中,尤其是在 $0 中,因为它被其他页面和插件使用。例如,组件页面在其中一个回调函数中使用了 $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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 2018-01-22
      • 2011-07-29
      • 2018-07-23
      • 2012-12-15
      • 1970-01-01
      • 2011-04-28
      相关资源
      最近更新 更多