根据手册,我应该能够使用如下代码获取文本控件的文本:
${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
没错,该部分中不存在该控件,因此您必须在自定义页面上获取内容。
如果用户更改了文本,则第二个示例应该正确运行,但是如果用户不更改文本,则第二个示例应该正确运行,因为更改事件不会触发。
您通常只需阅读页面离开回调中的内容即可:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句