按照手册,我应该能够获得文本控件的文本,代码如下:
${NSD_GetText} $TextBox $0
MessageBox MB_OK "You typed:$\n$\n$0"我总是从这个电话中得到空的字符串。在下面的代码中,文本框显示“正确”,但细节总是显示Contents:;如果我注释了对${NSD_GetText}的调用,就会得到Contents: wrong。
!include nsDialogs.nsh
!include LogicLib.nsh
Var Dialog
Var TextBox
Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles
Function nsDialogsPage
StrCpy $0 "wrong"
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateText} 0 12u 93% 12u "correct"
Pop $TextBox
nsDialogs::Show
FunctionEnd
Function nsDialogsPageLeave
FunctionEnd
Section
${NSD_GetText} $TextBox $0
DetailPrint "Contents: $0"
SectionEnd所以我想,当我试图打印它的内容时,这个控件可能不存在,并且尝试在输入到控件中时更新文本;这没有帮助。难以置信的是,NSIS是这样被破坏的,所以,我做错了什么?
!include nsDialogs.nsh
!include LogicLib.nsh
Var Dialog
Var TextBox
Var Text
Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles
Function nsDialogsPage
StrCpy $0 "wrong"
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateText} 0 12u 93% 12u "correct"
Pop $TextBox
${NSD_OnChange} $TextBox UpdateText
nsDialogs::Show
FunctionEnd
Function nsDialogsPageLeave
FunctionEnd
Function UpdateText
${NSD_GetText} $TextBox $Text
FunctionEnd
Section
DetailPrint "Contents: $Text"
SectionEnd发布于 2016-10-14 16:43:20
您是正确的,该控件在区段中不存在,因此您必须在自定义页上获取内容。
如果用户更改文本,则第二个示例应该正确工作,但如果用户不更改文本,则不会正确工作,因为更改事件不会触发。
通常只需阅读页面中的内容就可以退出回调:
Var Dialog
Var TextBox
Var Text
!include LogicLib.nsh
!include nsDialogs.nsh
Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles
Function nsDialogsPage
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateText} 0 12u 93% 12u "correct"
Pop $TextBox
nsDialogs::Show
FunctionEnd
Function nsDialogsPageLeave
${NSD_GetText} $TextBox $Text
FunctionEnd
Section
DetailPrint "Contents: $Text"
SectionEndhttps://stackoverflow.com/questions/40047898
复制相似问题