`
mkdkd
  • 浏览: 34427 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
社区版块
存档分类
最新评论

VBS教程2

 
阅读更多

VBS教程2
2011年02月19日
  OK,脚本运行成功。
  其实,像这么简单的脚本,我们完全可以不用sub过程也可以实现,这里呢我就不把代码写出来了,希望学习VBS的朋友可以自己下去摸索摸索,写完之后发出来跟大家交流交流。
  但是,这节课我还是使用了sub过程,还用了两个,第一个是用于实现转换变量值的过程,第二个,是针对button1被单击的事件写的过程,如果你对第二个过程不理解,可以去看我那个开场篇,里边详细介绍的有。
  我上边说了,这个例子非常经典,为什么说它经典呢?因为它包含了我们这节课要介绍的一种思想,一种将一个大程序的许多功能分成用一个一个语句块来实现的一种思想。
  我们先是定义了一个具备转换功能的过程,然后在下面的语句中使用call关键字调用了该过程,那么这就是我们这个交换变量值的脚本的实现思想。
  在上例中的第7行里,我是这么写的:
  c=a:a=b:b=c
  中间用的是冒号,在VBS里,这句话跟下边的这几句的效果是一样的:
  c=a
  a=b
  b=c
  也就是说,当两条或多条语句非常短时,我们可以将它们放到同一行里来,在它们的中间使用冒号分隔开,这样就行了。
  另外,代码的第9行,我使用了一个单引号,然后在这个单引号后面写了很多内容,但是我们运行网页的时候并没有发现这些内容出现在网页中,为什么呢?
  聪明的你可能已经想到了,对,这就是VBS中的注释,在VBS里,注释内容是以一个单引号开始的,注释内容可以帮助我们理解这些代码,可以使人的思路变得清晰,所以养成在你的代码里多写注释的习惯是非常有必要的。
  那么,这些琐碎的东西处理完,我们开始讲这节课里的正主―--过程。
  看代码的第5行,
  sub myswap(a,b)
  这句话的意思是,定义一个名为myswap的过程,这个过程有两个参数,我们要记得的是,在定义过程时括号中跟的参数,被成为形式参数,至于形式到底是什么意思,需要咱们自己来稍微的理解一下,其实也就是这些参数并没有被实际使用到,呃,好像我这里说的有点模糊,还是咱们自己去理解吧,这里的形式参数跟后面的调用过程时的实际参数是一一对应的。
  然后,在代码的第8行,使用end sub语句结束myswap过程的定义。
  代码的第10行,
  sub button1_onclick()
  定义了一个针对button1按钮被单击时要执行的过程。
  第11行,使用dim语句声明了两个变量。
  第12行和第13行,为这两个变量赋值。
  第14行,使用call语句来调用myswap过程,并将括号内的x和y传递给myswap过程充当原本定义myswap过程时的参数a和参数b,这两个被传递过去的参数,被称为实际参数,它们的作用是替换形式参数。
  第19行,结束该sub过程。
  好了,对于一名跟代码打交道的人来说,代码出现错误那是再正常不过的事了,所以我们在学习语言的时候一定要有耐心,如果你的程序出错了,耐着性子去调试它,你会在调试它的过程中学到很多课本上讲不到的知识,学习脚本也是如此。
  另外,说一下,不要想着一篇文章你看一遍就完全懂了,你应该去看第二遍、第三遍,直到你掌握了它为止。
  好了,sub过程就先说到这,我们的VBS系列,到这里也要中途停止一段时间了,大概到10月份左右,我会回来继续写的,非常感谢那些耐心看我课程的朋友,谢谢你的支持。
  再见。
  今天是9月6号,开始继续更新VBS教程。
  上次因为一些私人原因,在6月21日的时候,发完第9节我就没再写了,那么,现在事情已经解决完毕,就开始继续写了。
  这也算是我的作品之一吧,我不希望我任何的一部作品会TJ,无论有没有人欣赏,我都会一天一天的把它写下去。
  上节课说的是sub过程,那么这节课就说说function函数吧。
  你可能会发现,我在上面这句话中,对sub和function用的名词不一样,我说的是sub过程和function函数,一个是过程,一个是函数,但是,从根本上来说,这2个都是过程,但它们也有一点的区别,即sub无返回值,而function有返回值,所以sub也是无返回值的过程,function是有返回值的过程,我习惯把function过程称为function函数。
  Function函数的基本语法格式为:
  Function 函数名 (形式参数)
  命令
  End function
  Function函数的调用格式为:
  函数名 (实际参数)
  Function函数的基本语法和调用格式,跟sub过程的都差不多的。
  好了,下面我们还是来看代码吧,这是一个在VBS教学中非常经典的例子--求最大公约数,那么我这里就老调重弹一下吧:
  ------------------------vbs_5.htm----------------- -------
  
  
  VBS系列课程--使用function函数求最大公约数
  
  function common(x,y)
  dim t
  '开始do...loop循环
  do while y0
  t=x mod y
  x=y
  y=t
  loop
  '结束do...loop循环
  common=x    '将common函数的返回值设为x的值
  end function
  sub button1_onclick()
  dim a,b,c
  a=form1.text1.value b=form1.text2.value c=common(a,b)    '使用common函数计算c的值
  form1.text3.value=c
  end sub
  
  
  
  
  请输入第一个整数:
  
  

  请输入第二个整数:
  
  

  求出最大公约数为:
  
  

  

  
  
  
  
  看看效果:
  我输入两个整数,求它们的最大公约数:
  好了,我们的脚本成功运行。
  那么,看完代码之后呢,我再说几点关于function函数的注意事项。
  因为function函数一般都是有返回值的,那么我们可以直接使function函数名出现在等式右方,即其可以被用在赋值语句里,比如:
  Function common (x,y)    ‘声明一个名为common的function函数
  ……
  C=common(a,b)           ‘将函数的返回值赋给c
  那么,从上面的例子中我们可以看到,function函数是可以出现是赋值语句的右边的,其实它也可以出现在赋值语句的左边,比如:
  Function common (x,y)    ‘声明一个名为common的function函数
  dim r
  do while y0
  r=x mod y
  x=y
  y=r
  loop
  common=x                ‘将x的值设为common函数的返回值
  另外,我们一定要记得的是,function函数是有返回值的,那么,我们可不可以定义一个没有返回值的function函数呢?
  答案是肯定的,我们完全可以定义一个表面上看起来没有返回值的function函数,比如:
  Function common (x,y)    ‘声明一个名为common的function函数
  dim r
  do while y0
  r=x mod y
  x=y
  y=r
  loop
  common=x                ‘将x的值设为common函数的返回值
  这段代码中,如果我们不写最后一句“common=x”,那么这个名为common的function函数则在表面上看起来是没有返回值的。
  但是,请注意我上面的用词,我说的是在表面上看起来没有返回值,那么实际上呢?
  实际上是不违反function函数的定义的,也就是说,实际上是有返回值的。
  像上边这段代码中,如果我不写最后那句代码,也就是说我没有给这个函数定义它的返回值,那么这个时候,function函数将会返回一个默认值:
  对于数值型函数,返回0;
  对于字符串型函数,返回空字符串,即””。
  好了,对于VBS中最重要的2个过程- -sub过程和function函数,我已经讲的差不多了,在下一节,我会单独的开一节课,来说这两个过程的访问权限的问题。
  完毕。
  这节课我们来说说sub过程和function函数的一个定义规则,即public和private。
  在声明sub过程和fuction函数的时候,我们是可以在其声明语句前边加上这2个规则的,如,在vbs_4.htm中:
  sub myswap(a,b) 我们也可以写成:
  Public sub myswap(a,b)
  再比如,在vbs_5.htm中:
  function common(x,y)
  我们也可以写成:
  Public function common(x,y)
  这个public如同它的字面意思一样,是表示公用的意思,如果我们在过程或函数的声明语句前加上这个public,那么,就表示这个过程或函数是公用过程、公用函数,那么这个过程或函数就可以被脚本中的所有过程或函数访问、调用。
  相反的,如果我们在过程或函数的声明语句前加上private,就表示这个过程或函数是私有过程、私有函数,既然是私有的,理所当然的,这个即将被声明的过程或函数是不可以被脚本中的其他过程或函数访问并调用的。
  这里的public和private有点像我们前边的课程里说的过程级变量和脚本级变量的区别,忘了的朋友可以去看下本VBS系列课程的第6课。
  那么,你可能会有点疑问,因为我们无论是在vbs_4.htm中,还是在vbs_5.htm中,都没有使用public或private,这是因为如果我们在声明一个过程或函数的时候没有指定其为public或为private的时候,VBS就默认的认为它是public,即默认公用。
  那么,说了这么多,关于public和private的内容就说完了,下面再说一点点原来没有提及到的内容。
  我们不可以在一个sub过程中再声明一个function函数,同样的,我们也不可以在一个function函数中声明一个sub过程,这是VBS所不允许的。
  过程和函数都是可以递归的,什么是递归呢?
  递归就是可以调用自身去完成任务,但是我建议朋友们慎用递归功能,因为递归有可能导致堆栈溢出。
  好了,这节课就说这么多了,完毕。
  说完了sub过程和function函数,我们再来介绍一下VBS中其他的函数。
  这节课要说的是inputbox函数,这是VBS中的一个输入函数。
  Inputbox函数的作用是弹出一个文本输入对话框,等待用户输入或单击按钮,并且该函数可以返回用户输入的内容。
  该函数的基本语法格式为:
  Inputbox prompt,title,default
  其中,prompt表示要显示的提示信息,title表示弹出的对话框的标题,default表示脚本运行时文本框里要显示的内容。
  这个函数的作用跟我们在本系列课程的第6节里使用到的prompt方法效果是差不多的,好了,下面还是来看代码吧:
  ------------------------vbs_6.htm----------------- -------
  
  
  VBS系列课程--inputbox函数
  
  sub MySub
  dim username
  username=inputbox("请输入你的名字:","inputbox函数应用示例")
  alert("欢迎你,"& username & "!")
  end sub
  
  
  
  打开本页面时,会弹出一个对话框要求输入名字,输入完毕后点击确定,然后弹出欢迎对话框。
  
  
  我们来看看效果:
  我输入一些文字:
  点击确定:
  这个函数的效果就是这样的了。
  我在上面的代码中并没有使用default这个参数,这个参数一般都是不会使用的,当然,使用此参数的效果如图:
  使用了default参数的话,在对话框弹出的时候文本框里就显示出了我们预先定义好的文字。
  对于这个函数来说,如果用户单击“确定”按钮或按回车键,函数都会返回用户输入的内容,如果用户单击“取消”或按ESC键,则函数返回一个零长度字符串(””)。
  好了,这个函数的内容就介绍完了,再见。
  上一篇:VBS系列课程--14
  下一篇:VBS系列课程--12
  |返回日志列表
  [转] VBS系列课程--13 [图片] 分享 复制地址 日志地址:  
  请用Ctrl+C复制后贴给好友。
  转载自 三叶草 2011年01月06日 12:10 阅读(0) 评论(0) 分类:设置空间 权限: 公开 
  字体:中
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics