${NSD_GetText} 总是 returns 空字符串
${NSD_GetText} always returns the empty string
根据 the manual,我应该能够使用如下代码获取文本控件的文本:
${NSD_GetText} $TextBox [=12=]
MessageBox MB_OK "You typed:$\n$\n[=12=]"
我总是从这个调用中得到空字符串。在下面的代码中,文本框显示 "correct" 但详细信息始终显示 Contents:
;如果我评论对 ${NSD_GetText}
的调用,我会得到 Contents: wrong
.
!include nsDialogs.nsh
!include LogicLib.nsh
Var Dialog
Var TextBox
Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles
Function nsDialogsPage
StrCpy [=13=] "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 [=13=]
DetailPrint "Contents: [=13=]"
SectionEnd
因此,当我尝试打印其内容时,我想也许该控件不存在,并尝试更新输入到控件中的文本;那没有帮助。 NSIS以这种方式被破坏是难以置信的,所以我做错了什么?
!include nsDialogs.nsh
!include LogicLib.nsh
Var Dialog
Var TextBox
Var Text
Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles
Function nsDialogsPage
StrCpy [=14=] "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
你说得对,Section 中不存在该控件,因此你必须在自定义页面上获取内容。
如果用户更改文本,您的第二个示例应该可以正常工作,但如果用户不更改文本则不会,因为更改事件不会触发。
您通常只是阅读页面离开回调中的内容:
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"
SectionEnd
根据 the manual,我应该能够使用如下代码获取文本控件的文本:
${NSD_GetText} $TextBox [=12=]
MessageBox MB_OK "You typed:$\n$\n[=12=]"
我总是从这个调用中得到空字符串。在下面的代码中,文本框显示 "correct" 但详细信息始终显示 Contents:
;如果我评论对 ${NSD_GetText}
的调用,我会得到 Contents: wrong
.
!include nsDialogs.nsh
!include LogicLib.nsh
Var Dialog
Var TextBox
Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles
Function nsDialogsPage
StrCpy [=13=] "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 [=13=]
DetailPrint "Contents: [=13=]"
SectionEnd
因此,当我尝试打印其内容时,我想也许该控件不存在,并尝试更新输入到控件中的文本;那没有帮助。 NSIS以这种方式被破坏是难以置信的,所以我做错了什么?
!include nsDialogs.nsh
!include LogicLib.nsh
Var Dialog
Var TextBox
Var Text
Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles
Function nsDialogsPage
StrCpy [=14=] "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
你说得对,Section 中不存在该控件,因此你必须在自定义页面上获取内容。
如果用户更改文本,您的第二个示例应该可以正常工作,但如果用户不更改文本则不会,因为更改事件不会触发。
您通常只是阅读页面离开回调中的内容:
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"
SectionEnd