Board logo

标题: [转贴] VBS脚本中InputBox函数的返回值使用技巧 [打印本页]

作者: find    时间: 2012-1-16 11:26     标题: VBS脚本中InputBox函数的返回值使用技巧

你一定很熟悉InputBox函数,就像熟悉MsgBox函数一样。一般来说,刚开始接触VBS的时候,学会的第一个函数是MsgBox,而第二个就是InputBox。
如果用户单击确定或按下 ENTER,则 InputBox 函数返回文本框中的内容。如果用户单击取消,则函数返回一个零长度字符串 ("")。

这是参考手册对InputBox函数返回值的说明,简单而明了,还有必要专门写一篇文章来讨论?我知道你一定对标题不屑一顾,换成是我,我也一定会不屑一顾,如果我没有看到百度VBS吧里的一个帖子。

关于Inputbox 疑惑
————————————————————————————
如果用户单击确定或按下 ENTER,则 InputBox 函数返回文本框中的内容。如果用户单击取消,则函数返回一个零长度字符串 ("")。
————————————————————————————
那如何区分用户是没有输入字符按了“确定”
还是按了“取消”呢?
有些时候想传入空字符的,而有些时候想取消输入

按照参考手册的说法,无论是用户没有输入字符按了“确定”,还是按了“取消”,函数的返回值都是零长度字符串""。这样看来,似乎没有办法区分用户是没有输入字符按了“确定”,还是按了“取消”。

我也以为这是无法实现的,但是下面却有人给出了解决方案:
  1. Str=InputBox("???")
  2. If Str="wffheu" Then MsgBox("a")
  3. Else if Str=False Then "您按。。。取消"
  4. End If
复制代码
虽然有语法错误,但是用False的确可以区分出“确定”和“取消”。为什么呢?因为如果用户单击取消,InputBox返回的并不是一个零长度的字符串"",而是Empty

用一个简单的程序就可以测试出来:
  1. str = InputBox("Enter a string")
  2. MsgBox TypeName(str)
复制代码
当没有输入字符直接按“确定”时输出String,而按“取消”时输出Empty。于是,似乎可以这样来判断到底是“确定”还是“取消”:
  1. str = InputBox("Enter a string")
  2. If str = Empty Then
  3. MsgBox "Cancel"
  4. Else
  5. MsgBox "OK"
  6. End If
复制代码
只可惜上面的代码是错的,无论按下“确定”还是“取消”,都会输出Cancel。因为无论是"" = Empty(比较前Empty会隐式转化成"")还是Empty = Empty都会返回真,正确的方法是用IsEmpty来判断:
  1. str = InputBox("Enter a string")
  2. If IsEmpty(str) Then
  3. MsgBox "Cancel"
  4. Else
  5. MsgBox "OK"
  6. End If
复制代码
再说说为什么可以用False来判断,"" = False返回假(比较前False会隐式转换成字符串"False"),而Empty = False返回真,于是可以判断。

看来文档写的也不一定是对的,尽信文档,不如无文档。
作者: Demon    时间: 2012-1-16 14:35

垃圾脚本之家

http://demon.tw/programming/vbs-inputbox.html
作者: applba    时间: 2012-1-16 15:20

回复 2# Demon


    so,are you from Taiwan?
作者: applba    时间: 2012-1-16 15:27

回复 2# Demon


     文中提到 Empty和""要分开处理,其实不用:
     if Empty="" then msgbox true

因为vbs会自动进行转换?vbs会把表达式中的Empty转换成""、0或Nothing。
所以一般情况下,无需考虑这种问题。当然早期版本(5以前)的vbs我就不知道是不是这样。
作者: Demon    时间: 2012-1-16 15:28

回复  Demon


    so,are you from Taiwan?
applba 发表于 2012-1-16 15:20

Taiwan is using traditional Chinese, but I am using simplified Chinese.
作者: Demon    时间: 2012-1-16 15:33

回复  Demon


     文中提到 Empty和""要分开处理,其实不用:
     if Empty="" then msgbox true
...
applba 发表于 2012-1-16 15:27

不好意思,我没看懂你在说什么。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2