第5章 基本函数
前面介绍了VB语言基础中的相关内容,了解了VB的标识符、常量、变量、数据类型、数组以及VB的基本语句和过程的运用。本章接着介绍VB语言基础中的另外一部分也是最后一部分——函数。
5.1 CurDir返回当前路径
本节介绍CurDir函数,该函数用于将代表当前路径的变量作为返回值返回到当前程序中,是一种非常有用的获取文件或文件夹路径的函数,希望通过本节的介绍,对该函数有更深入的了解。
技术要点
在本实例中主要使用的技术是CurDir函数、常数vbCrlf、对象App以及Path属性。主要功能和用法如下:
●CurDir函数,主要用于返回当前的路径。其中,参数driver表示存在驱动器的字符串表达式,当省略该参数时,则CurDir返回当前驱动器的路径。
●常数vbCrlf,表示回车和换行符的组合常数,等价于Chr$(13)+Chr$(10)。
●对象App,可以表示双重含义,当单独使用时表示一个属性,主要用于返回一个App对象;当与属性 Path 组合使用时表示一个对象,表示应用于列表中的对象。
● Path属性,表示一个指示路径的字符串,该属性有两种用法,分别表示返回或设置当前路径和返回指定文件、文件夹或驱动器的路径。
Pat第一种用法的语法格式:
Object.Path[=PathName]
其中,参数Object表示应用于列表中的对象,数据类型是对象型;参数PathName表示获得的路径名,数据类型是字符串类型。
第二种用法的语法格式:
Object.Path
其中,参数Object表示具体的文件名、文件夹名或驱动器名。
实现代码
Private Sub Form_Click() Dim MyPath As String '定义字符型变量 Dim ComStr As String '定义字符型变量 MyPath = CurDir '由CurDir获得当前路径 TxtShow.Text="当前路径为:"&vbCrLf&MyPath&Space(5)&"- >CurDir" '显示返回的路径 ComStr = App.Path & Space(2)& " - >App.Path" '获得当前路径 TxtCom.Text = ComStr '显示当前路径 End Sub
单击工具栏中的保存按钮,保存工程,然后单击工具栏中的启动按钮运行工程,程序运行结果如图5.1所示。
图5.1 程序运行界面图
然后单击工具栏中的结束按钮,或者单击运行窗口的关闭按钮,结束程序的运行。
源程序解读
(1)在Form_ Click()事件中,首先定义了两个字符串变量MyPath和ComStr,分别存储由CurDir和App.Path获得的路径。
(2)然后,运用CurDir函数获得当前的路径并赋值给变量MyPath,并用“TxtShow”文本框在窗体上显示出来。
(3)最后,由App.Path获得当前路径并赋值给变量ComStr,并用“TxtCom”文本框在窗体上显示出来,主要用于跟上面获得的路径进行比较。
5.2 CurDir记录登录日志
在上节中介绍了函数CurDir返回当前路径的功能,并与App.Path返回的当前路径进行比较,从而说明CurDir函数的有效性。本节接着介绍函数CurDir的另外功能,即记录登录日志。
技术要点
本实例中主要用到的技术是Print方法、Open方法、Close方法和CurDir函数。主要功能和用法如下:
●Open方法,主要用于打开一个已知的文件,在本例中,Open方法打开日志文件主要进行的操作是追加字符串。
● Close方法,主要用于关闭一个打开的文件。
● CurDir函数,在本例中主要是返回日志文件的当前路径。
Print方法主要用于在窗体、图片框、立即窗口等对象上面显示字符串,具体使用语法为:
[Object.]Print [OutputList]
这种语法的详细情况在前面已经介绍过,在此介绍Print方法的另一种应用方法:
Print Object,[OutputList]
这种用法表示在对象Object上面显示OutputList的内容,如本例中,在日志文件中显示登录信息。
实现代码
Dim mSky '定义一个可变型变量 '退出事件 Private Sub CmdExit_Click() Unload Me '卸载窗体 End Sub '登录事件 Private Sub CmdLogin_Click() Dim Tstr As String '定义一个字符串变量 mSky = mSky + 1 '变量增1 Text1.Text = "Text" & Str$(mSky) '显示第几个登录文本 Tstr = TxtName.Text & Space$(6)& _ TxtPassWord.Text & Space$(6)& _ Text1.Text & Space$(2)& _ CStr(Date& Space$(1)& Time) '记录登录信息 TxtShow.Text = Tstr '显示登录信息 Open (CurDir & "\登录日志.ini")For Append As#2 '追加记录 Print #2,Tstr '把记录写入日志 Close#2 '关闭日志 End Sub '初始化文本框的属性 Private Sub Form_Load() TxtName.Text = "BlueSky" '给文本框的Text属性赋初值 TxtPassWord.Text = "123456" '给文本框的Text属性赋初值 Text1.Visible = False '使得文本框不可见 End Sub
按Ctrl+S组合键保存工程,然后按F5键运行工程。单击启动按钮后,程序运行结果如图5.2所示。单击“Login”按钮时,程序运行结果如图5.3所示。
图5.2 初始状态的运行界面图
图5.3 登录之后的运行界面图
源程序解读
(1)代码首先定义了一个整型变量mSky,用来表示用户的登录次数。
(2)在Form_ Load()事件中,分别初始化“TxtName”文本框、“TxtPassWord”文本框和“Text1”文本框。分别赋值为:“BlueSky”、“123456”、Visible的属性为False。
(3)当单击“CmdLogin”命令按钮时,就触发CmdLogin_ Click()事件。在该事件中,首先定义一个字符串变量Tstr用来存储登录产生的记录。然后,把变量mSky的值增1,并给“Text1”文本框赋值,表示登录的文本次数。最后,把登录的信息赋值给变量Tstr,并运用“TxtShow”文本框在窗体上显示出来。
(4)接下来,使用Open方法打开日志文件把登录信息追加到日志文件中,执行完毕后关闭日志文件。
(5)最后,当单击“CmdExit”命令按钮时,就触发CmdExit_ Click()事件,执行退出窗体的操作。
说明:实例中Close方法后面的文件号#2可以省略。
5.3 Dir查找所有目录
在前面两节中介绍了 CurDir函数的用法,希望读者通过前两节的学习能够熟练运用CurDir函数。本节继续介绍另外一种函数——Dir,这个函数主要用来返回文件、文件夹或目录的名称。
技术要点
本实例运用的主要技术是Dir函数和Exit语句,主要功能和用法如下:
● Dir函数,主要用于返回当前目录下的文件名、文件夹名或目录名。
● Exit语句,主要用来退出一个过程或模块。
Dir函数的具体语法如下:
Dir [(pathname[,attributes])]
其中,参数pathname,主要用于指定文件名的字符串表达式,可能包含目录、文件夹或驱动器,如果没有查找到pathname,则返回空字符串。在本例中,pathname就是包含各个驱动器的字符串;参数attributes主要用来指定文件的属性,是常数或数值表达式,如果省略,则返回没有属性的文件,attributes的设置有很多种:当设置为vbNormal时,表示没有属性的文件;当设置为vbReadOnly时,表示没有属性的只读文件;当设置为vbHidden时,表示没有属性的隐藏文件;当设置为VbSystem时,表示没有属性的系统文件;当设置为vb-Volume时,表示卷标文件;当设置为vbDirectory时,表示没有属性的文件及其路径和文件夹。
Exit语句的具体语法如下:
Exit [Object]
其中,Object就是要结束的对象,可以是一个过程Sub,一个函数Function,一个循环语句Do、For,也可以是过程Property。
实现代码
'组合框的Click事件 Private Sub CmbS_Click() Dim strPath As String '定义字符串变量 Select Case CmbS.ListIndex Case 0 TxtShow.Text = "" '清空文本框中的内容 strPath = Dir("C:\",vbDirectory) '获得当前路径C盘下的目录名 Case 1 TxtShow.Text = "" '清空文本框中的内容 strPath = Dir("D:\",vbDirectory) '获得当前路径D盘下的目录名 Case 2 TxtShow.Text = "" '清空文本框中的内容 strPath = Dir("E:\",vbDirectory) '获得当前路径E盘下的目录名 Case 3 TxtShow.Text = "" '清空文本框中的内容 strPath = Dir("F:\",vbDirectory) '获得当前路径F盘下的目录名 End Select Do If strPath < > vbNullString Then TxtShow.Text = TxtShow.Text & vbCrLf & strPath '显示查找的目录名 Else Exit Do '退出Do循环 End If strPath = Dir() '接着查找下一个目录 Loop End Sub '初始化组合框,添加盘符类型 Private Sub Form_Load() CmbS.AddItem "C" '在组合框中添加"C" CmbS.AddItem "D" '在组合框中添加"D" CmbS.AddItem "E" '在组合框中添加"E" CmbS.AddItem "F" '在组合框中添加"F" End Sub
按Ctrl+S组合键保存工程,然后按F5键运行工程。在C盘中查找目录的运行结果如图5.4所示。在D盘中查找目录的运行结果如图5.5所示。
图5.4 在C盘查找目录的界面图
图5.5 在D盘查找目录的界面图
源程序解读
(1)在Form_ Load()事件中,初始化“CmbS”组合框,分别添加盘符的类别:C,D,E, F。然后,当单击“CmbS”组合框时,就触发CmbS的Click事件。
(2)在CmbS_ Click()事件中,运用Select Case语句,根据“CmbS”组合框的ListIndex属性,对各个盘符分别查找目录。在每个语句块中,都要先把“TxtShow”文本框的内容清空。
(3)然后,利用Dir函数返回当前盘符下的目录名。
(4)最后,运用Do循环语句继续查找该盘符下的下一个目录名,直到查找完毕。并把最终查找的目录名集合在文本框中显示出来。
5.4 运用Fix和Rnd函数进行乘法运算
在前面小节中分别介绍了CurDir函数和Dir函数,这两种函数基本上都与文件的存取有关,但又不是纯粹的文件处理函数。本节介绍另外两种函数——Fix函数和Rnd函数的运用实例。
技术要点
本节实例中主要使用的技术是Fix函数、Rnd函数和Randomize语句。主要功能和用法如下:
● Fix函数,是VB数学函数中的取整函数。
● Rnd函数,主要用于产生一个随机的单精度类型的数值。
● Randomize语句,主要用来初始化随机数产生器。
Fix函数的具体语法为:
Fix(number)
其中,参数number表示双精度类型的数值或任何有效的数值表达式,如果number<0,则Fix会返回大于 number的最小负整数。并且 Fix函数不遵从四舍五入的原则,而是把number的小数部分直接去掉。
Rnd函数的具体语法为:
Rnd[(Number)]
其中,参数Number,表示一个单精度数值或任何有效的数值表达式。根据Number值的不同,Rnd的返回值也不同,当Number<0时,每次返回值都使用Number作为随机数种子得到的相同结果;当Number>0时,返回值为序列中的下一个随机数;当Number=0时,返回值为最近生成的数;当Number被省略时,返回值为序列中的下一个随机数。
Randomize语句的具体语法为:
Randomize[number]
其中,参数number是可变型或任何有效的数值表达式,该参数将Rnd函数的随机数生成器初始化,该随机数生成器给number一个新的种子值。如果省略number,则用系统计时器返回的值作为新的种子值。
实现代码
Dim a,b,c As Integer '定义三个整型变量 '退出系统事件 Private Sub CmdExit_Click() Unload Me '卸载窗体 End Sub '出题目事件 Private Sub CmdGT_Click() Randomize '初始化随机数产生器 a = Fix(7 * Rnd + 1) '产生随机数 b = Fix(6 * Rnd + 1) '产生随机数 TxtTitle.Text = Str$(a)+ " ×" + Str$(b)+ " =" '出题 TxtResult.Text = "" '清空文本框TxtResult中内容 TxtJudge.Text = "" '清空文本框TxtJudge中内容 CmdJR.Enabled = True '使得CmdJR能被按下 CmdJR.Default = True '使得CmdJR为默认按钮 CmdGT.Enabled = False '使得CmdGT不能被按下 TxtResult.SetFocus '将焦点设置在TxtResult中 End Sub '判断结果事件 Private Sub CmdJR_Click() c = Val(TxtResult.Text) '得到所填的结果 If c = 0 Then Exit Sub '如果乘积为0退出过程 If c = a * b Then '判断乘积结果与填的结果是否相等 TxtJudge.Text = "正确" '显示判断结果 Else TxtJudge.Text = "错误" '显示判断结果 End If CmdGT.Enabled = True '使得CmdGT能被按下 CmdGT.Default = True '使得CmdGT为默认按钮 CmdJR.Enabled = False '使得CmdJR不能被按下 End Sub '窗体活动时的事件 Private Sub Form_Activate() CmdGT_Click '执行CmdGT单击事件 End Sub
按Ctrl+S组合键保存工程,然后按F5键运行工程。当输入正确计算结果时,程序的运行结果如图5.6所示。当输入错误计算结果时,程序的运行结果如图5.7所示。
图5.6 输入正确结果时的界面图
图5.7 输入错误结果时的界面图
源程序解读
(1)代码首先定义了三个整型变量a、b、c,分别表示被乘数、乘数和积的判断量。
(2)在Form_ Activate()事件中,调用CmdGT_ Click()事件。
(3)在CmdGT_ Click()事件中,首先由Randomize语句初始化随机数产生器。然后,由Fix函数和Rnd函数共同得到被乘数和乘数并分别赋值给变量a和b。接着由“TxtTitle”文本框显示出两个数的乘式,并置“TxtResult”文本框和“TxtJudge”文本框的内容为空。另外,分别置“CmdJR”命令按钮的Enable和Defult属性为True,“CmdGT”命令按钮的Enable属性为False,“TxtResult”文本框的SetFoucs属性。
(4)当在“TxtResult”文本框中填写出计算结果后,就单击“CmdJR”按钮,继而触发Cmd-JR_ Click()事件。
(5)在CmdJR_ Click()事件中,首先把填写的结果赋值给变量c。然后,判断c与a*b的结果是否相同。如果相同,则置TxtJudge的内容为“正确”;否则置TxtJudge的内容为“错误”。另外,分别置“CmdGT”命令按钮的Enable和Defult属性为True。“CmdJR”命令按钮的Enable属性为False。
(6)当单击“CmdExit”命令按钮时,就执行退出窗体的操作。
说明:取整函数,除了Fix之外,还有Int函数,两个的唯一区别是,当number<0时, Int函数返回小于number的最大负整数。
5.5 运用Format函数进行数据类型转换
在上一节中介绍了VB数学函数中的取整函数Fix,最后还提到与另外一个取整函数Int的区别,希望读者在运用时注意这一点。本节介绍另外一种格式化的函数——Format的应用实例,即进行数据类型的转换。
技术要点
本实例中使用的主要技术是Format函数,该函数主要作用是根据设定的格式格式化表达式。具体语法为:
Format (expression [,format [,firstdayofweek[,firstweekofyear]]])
其中各参数的含义如下:
●参数expression表示任何有效的表达式,即被格式化的表达式。
●参数format表示设定的格式,是有效的命名表达式或用户自定义格式表达式。
●参数firstdayofweek表示一周的第一天,是个常数。设置方式有:vbUseSystem,VbSunday,vbMonday,vbTuesday,vbWednesday,vbThursday,vbFriday,vbSaturday,其中设置值的含义是显而易见的,省略时默认为VbSunday。
●参数firstweekofyear表示一年的第一周,也是个常数。设置方式有:vbUseSystem,vbFirstJan1,vbFirstFourDays,VbFirstFullWeek,各设置值的含义依次是:使用系统设置;从包含一月一日的那一周开始;从本年第一周开始,而此周至少有四天在本年中;从本年第一周开始,而此周完全在本年中,省略时,默认为vbFirstJan1。
说明:Format函数格式化的对象包括数字、日期、时间和字符串。
实现代码
Dim Mystr As String '定义字符串变量 Private Sub CmdChange_Click() TxtDate.Text = "" '置“TxtDate”文本框的内容为空 TxtNumber.Text = "" '置“TxtNumber”文本框的内容为空 Label1.Caption = "显示系统当前时间和日期:" '置“Label1”标签的标题内容 Mystr = Format$(Date,"M/d/yy") '格式化当前日期 '显示格式化后的系统时间 TxtDate.Text = Mystr & " 按月/日/年显示系统日期" Mystr = Format$(Date,"d-mmmm-yy") '按照给定的格式格式化系统时间 '显示格式化后的系统时间 TxtDate.Text = TxtDate.Text & vbCrLf & Mystr & " 按日/月份全名/年显示系统日期" Mystr = Format$(Date,"mmmm-yy") '按照给定的格式格式化系统时间 '显示格式化后的系统时间 TxtDate.Text = TxtDate.Text & vbCrLf & Mystr & " 按月份全名-年显示系统日期" Mystr = Format$(Date,"yyyy-mm-dd") '按照给定的格式格式化系统时间 '显示格式化后的系统时间 TxtDate.Text = TxtDate.Text & vbCrLf & Mystr & " 按yyyy年-mm月-dd日显示系统日期" Mystr = Format$(Date,"yyyy-m-d") '按照给定的格式格式化系统时间 '显示格式化后的系统时间 TxtDate.Text = TxtDate.Text &vbCrLf &Mystr&" 按yyyy年-m月-d日显示系统日期" Mystr = Format$(Date,"yyyy年m月d日") '按照给定的格式格式化系统时间 '显示格式化后的系统时间 TxtDate.Text = TxtDate.Text & vbCrLf & Mystr & " 按yyyy年m月d日显示系统日期" Mystr = Format$(Time,"h小时:m分s秒") '按照给定的格式格式化系统时间 '显示格式化后的系统时间 TxtDate.Text = TxtDate.Text & vbCrLf & Mystr & " 按h小时m分s秒显示系统时间" Mystr = Format$(Time,"hh:mm:ss") '按照给定的格式格式化系统时间 '显示格式化后的系统时间 TxtDate.Text = TxtDate.Text & vbCrLf & Mystr & " 按hh小时mm分钟ss秒显示系统时间" '显示格式化后的系统时间 Mystr = Format$(Time,"h时m分s秒 AM/PM") '按照给定的格式格式化系统时间 '显示格式化后的系统时间 TxtDate.Text = TxtDate.Text & vbCrLf & Mystr & " 按h小时m分s秒 AM或PM显示系统时间" Mystr = Format$(0.89669,"0.000") '按照给定的格式格式化数字 '显示格式化后的数字 TxtNumber.Text = Mystr & " 小数点后保留3位显示金额" Mystr = Format$("0.8963"," ¥ 0.000") '按照给定的格式格式化数字 '显示格式化后的数字 TxtNumber.Text = TxtNumber.Text & vbCrLf & Mystr & " 显示带人民币符号的金额" Mystr = Format$(23890.34,"##,0.00") '按照给定的格式格式化数字 '显示格式化后的数字 TxtNumber.Text = TxtNumber.Text & vbCrLf & Mystr & " 显示带千位符的金额" Mystr = Format$("0.89","0%") '按照给定的格式格式化数字 '显示格式化后的数字 TxtNumber.Text = TxtNumber.Text & vbCrLf & Mystr & " 显示百分数" '按照给定的格式格式化数字 Mystr = Format$("23423545645645877345111111999999","0.00E+00") '显示格式化后的数字 TxtNumber.Text = TxtNumber.Text & vbCrLf & Mystr & " 将数值显示为科学计数法的格式" Mystr = Format$("mr","@@@@") '按照给定的格式格式化数字 '显示格式化后的数字 TxtNumber.Text = TxtNumber.Text & vbCrLf & Mystr & " 在指定的字符前加一定数量的空格" End Sub '窗体变为活动时的事件 Private Sub Form_Activate() Dim MyTime,MyDate As Date '定义两个时期型变量 Label1.Caption = "显示设定的时间和日期:" MyTime = #2:14:30 PM# '设定时间 MyDate = #9/2/2008# '设定日期 '以系统设置的长时间格式返回当前系统时间 Mystr = Format$(Time,"Long Time") TxtDate.Text = Mystr '以系统设置的长日期格式返回当前系统日期 Mystr = Format$(Date,"Long Date") TxtDate.Text = TxtDate.Text & vbCrLf & Mystr Mystr = Format$(MyTime,"h:m:s") '返回 "14:14:30" TxtDate.Text = TxtDate.Text & vbCrLf & Mystr '显示"14:14:30" Mystr = Format$(MyTime,"hh:mm:ss AMPM") '返回 "02:14:30 PM" TxtDate.Text = TxtDate.Text & vbCrLf & Mystr '显示"02:14:30 PM" Mystr = Format$(MyDate,"dddd,mmm d yyyy") '返回 "Tuesday,Sep 2 2008" TxtDate.Text = TxtDate.Text & vbCrLf & Mystr '显示"Tuesday,Sep 2 2008" Mystr = Format$(896) '返回 "896" TxtNumber.Text = Mystr '显示"896" '用户自定义的格式 Mystr = Format$(8659.6,"##,##0.00") '返回 "8,659.60" TxtNumber.Text = TxtNumber.Text & vbCrLf & Mystr '显示"8,659.60" Mystr = Format$(669.9,"###0.00") '返回 "669.90" TxtNumber.Text = TxtNumber.Text & vbCrLf & Mystr '显示"669.90" Mystr = Format$(8,"0.00%") '返回 "800.00%" TxtNumber.Text = TxtNumber.Text & vbCrLf & Mystr '显示"800.00%" Mystr = Format$("HELLO"," <") '返回 "hello" TxtStr.Text = Mystr '显示"hello" Mystr = Format$("This is good"," >") '返回 "THIS IS GOOD" TxtStr.Text = TxtStr.Text & vbCrLf & Mystr '显示"THIS IS GOOD" End Sub
按Ctrl+S组合键,保存工程,然后按F5键,运行工程。当单击启动按钮后,程序运行结果如5.8所示。当单击“第二种格式的变换”按钮时,程序运行结果如图5.9所示。
图5.8 第一种格式化的结果图
图5.9 第二种格式化的结果图
源程序解读
(1)代码首先定义了一个字符串变量Mystr,用来存储格式化后的字符串。
(2)在Form_ Activate()事件中,首先定义两个日期型变量MyTime和MyDate,分别表示时间和日期。然后,分别给两个变量设置初始值:#2:14:30 PM#,#9/2/2008#。并把标签Label1的Capition属性设置为“显示设定的时间和日期:”。最后运用Format函数,按照设定的格式显示不同格式的时间和日期。另外,还运用Format函数,按照设定的格式显示不同的数字和字符串。
(3)当单击“CmdChange”命令按钮时,就触发CmdChange的Click事件。在CmdChange_ Click()事件中,首先把“Label1”标签的 Capition 属性设置为“显示系统当前时间和日期:”。然后运用Format函数,按照设定的格式分别显示当前系统的时间和数字。
5.6 运用Input函数输入指定数目的文字
在前面两节中分别介绍了专门针对数字的函数Fix和Rnd,以及针对各种有效表达式的格式化函数Format,其中Format的功能比前两种的功能强大,在编程过程中也更常用。本节介绍另一种更常用的输入函数——Input的应用实例,即在文本框中输入指定数目的文字。
技术要点
本节使用的主要技术是Input函数,该函数主要用于把一定数量的字符从已知文件中输出。具体语法格式为:
Input (number,[#]filenumber)
其中,参数number表示输出字符的个数,是任何有效的数值表达式;参数filenumber表示文件号。
说明:Input函数只用于以Input或Binary方式打开的文件。如本例中,文件MyLove是以Input方式打开的。
实现代码
Dim MyStr As String '定义字符串变量 '命令按钮CmbSN的Click事件 Private Sub CmbSN_Click() Open App.Path & "\MyLove.txt" For Input As#1 '打开输出文件 Select Case CmbSN.ListIndex Case 0 TxtShow.Text = "" '置文本框的内容为空 MyStr = Input(100,#1) '输出文字 Close '关闭文件 Case 1 TxtShow.Text ="" '置文本框的内容为空 MyStr = Input(200,#1) '输出文字 Close '关闭文件 Case 2 TxtShow.Text = "" '置文本框的内容为空 MyStr = Input(300,#1) '输出文字 Close '关闭文件 Case 3 TxtShow.Text = "" '置文本框的内容为空 MyStr = Input(360,#1) '输出文字 Close '关闭文件 End Select TxtShow.Text = MyStr '显示输出文字 End Sub '初始化组合框,添加输出字符的个数 Private Sub Form_Load() CmbSN.AddItem "100" '在组合框中添加"100" CmbSN.AddItem "200" '在组合框中添加"200" CmbSN.AddItem "300" '在组合框中添加"300" CmbSN.AddItem "360" '在组合框中添加"360" End Sub
按Ctrl+S组合键,保存工程,然后按F5键,运行工程。当选择组合框中的“100”选项时,程序的运行结果如图5.10所示。当选择组合框中的“200”选项时,程序的运行结果如图5.11所示。
图5.10 输入100个字符时的运行结果图
图5.11 输入200个字符时的运行结果图
源程序解读
(1)代码首先定义一个字符串变量MyStr,用来存储输入的字符。
(2)在Form_ Click()事件中,初始化“CmbSN”组合框,运用组合框控件的AddItem方法在组合框中分别添加输入字符的个数:100,200,300,360。当单击“CmbSN”组合框时,就触发CmbSN的Click事件。
(3)在CmbSN_ Click()事件中,首先运用Open语句打开当前路径下的文件MyLove,并且以输出方式打开文件。
(4)其次,运用Select Case语句,根据CmbSN的ListIndex属性的值,运用Input函数分别输出不同个数的字符。
(5)最后,关闭文件并把输入的字符由“TxtShow”文本框显示出来。
注意:与Input#语句不同,Input函数返回它所读出的所有字符,包括逗号、回车符、空白列、换行符、引号和前导空格等。
5.7 InputBox输入用户信息
在上一节中介绍了输出函数Input,这个函数主要针对从某个文件中读取一定个数的字符,并且这种函数输出的字符通常用Print#语句或Put语句写入文件,本节介绍另外一种输入函数——InputBox的应用实例,即输入用户信息。
技术要点
在本实例中用到的主要技术是InputBox函数和MsgBox函数。
InputBox函数,主要用于在对话框来中显示提示,并根据提示信息等待用户输入正文或按下按钮,然后返回包含文本框内容的字符串。具体语法为:
InputBox (prompt [,title][,default][,xpos][,ypos][,helpfile,context])
其中各参数的含义如下:
●参数prompt表示对话框中的提示信息,是字符串表达式。prompt的最大长度约是1024个字符,由所用字符的宽度决定。如果prompt有多行,则可以在各行之间用回车符(Chr(13))、换行符(Chr(10))或回车换行符的组合(vbCrlf)来分隔。
●参数title表示对话框标题栏中的信息,是字符串表达式。如果省略title,则标题栏中显示应用程序的名称。
●参数default表示文本框中的字符串表达式,在没有其他输入时作为默认值。如果省略default,则表示文本框为空。
●参数xpos表示对话框的左边与屏幕左边的水平距离,是数值表达式。如果省略xpos,则表示对话框在水平方向居中。
●参数ypos表示对话框的上边与屏幕上边的垂直距离,是数值表达式。如果省略ypos,则表示对话框在屏幕垂直方向距下边大约三分之一的位置。
●参数helpfile表示帮助文件,即用该文件为对话框提供上下文相关的帮助,是字符串表达式。如果有参数helpfile,则表示后面有参数context。
●参数context表示由帮助文件的作者指定给某个帮助主题的帮助上下文编号,是数值表达式。同样,如果有参数context,则必须有参数helpfile。
MsgBox函数,主要用于在对话框中显示消息,等待用户单击按钮,并返回一个整型变量告诉用户单击哪一个按钮。具体语法为:
MsgBox (prompt [,buttons][,title][,helpfile,context])
其中,参数buttons表示对话框上显示按钮的数目及形式,在对话框上使用的图标样式显示出来,是数值表达式。如果省略该参数,则buttons的默认值为0。其他参数的含义跟前面介绍的一样。
实现代码
'组合框控件CmbName的Click事件 Private Sub CmbName_Click() Dim StrP,StrPPut As String '定义两个字符串变量 Select Case CmbName.ListIndex Case 0 StrP = "123456" '设置密码 StrPPut = InputBox("请输入Administor对应密码:") '输入密码 Case 1 StrP = "000000" '设置密码 StrPPut = InputBox("请输入Guster对应密码:") '输入密码 Case 2 StrP = "111111" '设置密码 StrPPut = InputBox("请输入User对应密码:") '输入密码 End Select If StrPPut = StrP Then TxtPassWord.Text = StrPPut '显示输入密码 MsgBox "登录成功!",vbOKOnly,"提示信息!" '提示登录成功 Else MsgBox "登录失败!",vbOKOnly,"提示信息!" '提示登录失败 End '退出过程 End If End Sub '卸载窗体事件 Private Sub CmdExit_Click() Unload Me '卸载窗体 End Sub '初始化组合框,添加用户名 Private Sub Form_Load() CmbName.AddItem "Administor" '在组合框中添加"Administor" CmbName.AddItem "Guster" '在组合框中添加"Guster" CmbName.AddItem "User" '在组合框中添加"User" End Sub
单击工具栏中的保存按钮,保存工程,然后单击工具栏中的启动按钮,运行工程。当选择组合框中的“Administor”项时,程序的运行结果如图5.12所示。当输入正确密码,并单击“确定”按钮时,程序运行结果如图5.14和图5.13所示。当输入错误密码,并单击“确定”按钮时,程序运行结果如图5.15所示。
图5.12 输入Administor对应密码界面图
图5.13 Administor成功登录界面图
图5.14 成功登录提示框界面图
图5.15 登录失败提示框界面图
然后单击工具栏中的结束按钮,或者单击运行窗口的关闭按钮,结束程序的运行。
源程序解读
(1)在Form_ Click()事件中,初始化“CmbName”组合框。使用组合框控件的AddItem方法分别加载用户名:Administor、Guster和User。
(2)当单击“CmbName”组合框时,就触发CmbName_ Click()事件。
(3)在CmbName_ Click()事件中,首先定义两个字符串变量StrP和StrPPut,分别存储设定的密码和输入的密码。然后运用Select Case语句,根据组合框的ListIndex属性的值,分别设置不用用户名对应的密码,并使用InPutBox函数输入登录密码存储到变量StrPPut中。接下来,比较变量StrPPut和变量StrP的值。如果相等,则显示登录密码,并由MsgBox提示框提示“登录成功”;否则由MsgBox提示框提示“登录失败”。
(4)当单击命令按钮CmdExit时,就触发CmdExit_ Click()事件,执行退出窗体的操作。
5.8 IsNumeric判断输入内容是否为数字
在前面两节中分别介绍了输入函数Input和InputBox函数,这两个函数的在调试程序时非常有用。此外,前面还介绍了针对数字的函数Fix函数和Rnd函数,本节要介绍另外一种针对数字的函数——IsNumeric的应用实例,即判断输入内容是否为数字,并计算圆的周长和面积。
技术要点
在本实例中用到的主要技术是IsNumberic函数,该函数主要用于指明表达式的结果是否是数字,函数返回值的数据类型是布尔型。具体语法为:
IsNumeric(expression)
其中,参数expression表示一个可变型,可以是数值表达式或字符串表达式。如果ex-pression的运算结果是数字,函数的返回值是True,否则,函数返回值是False。
实现代码
Const Pi As Single = 3.1415 '定义常量 Dim Perimeter As Single '定义变量周长 Dim Radius As Single '定义变量半径 Dim Area As Single '定义变量面积 Dim Volume As Single '定义变量体积 '命令按钮CmbType的Click事件 Private Sub CmbType_Click() Select Case CmbType.ListIndex Case 0 If TxtInput.Text = "" Then '判断文本框中的内容是否为空 MsgBox "请输入半径!",64,"信息提示" '输入半径的提示 TxtInput.Text = "" '置文本框TxtInput的内容为空 TxtInput.SetFocus '使光标停留在文本框TxtInput中 ElseIf Not IsNumeric(TxtInput.Text)Then '判断文本框中的内容是否是数字 MsgBox"请输入正确的半径值!",64,"信息提示' "输入正确半径值的提示 TxtInput.Text = "" '置文本框TxtInput的内容为空 TxtInput.SetFocus '使光标停留在文本框TxtInput中 Else Radius = Val(TxtInput.Text) '把文本框中半径的值赋值给变量Radius Perimeter = Pi *2 * Radius '计算圆的周长 LabShow.Caption = "圆的周长为:" &Perimeter'显示圆的周长 TxtResult.Text = Perimeter '显示计算结果 End If Case 1 If TxtInput.Text = "" Then '判断文本框中的内容是否为空 MsgBox "请输入半径!",64,"信息提示" '输入半径的提示 TxtInput.Text = "" '置文本框TxtInput的内容为空 TxtInput.SetFocus '使光标停留在文本框TxtInput中 ElseIf Not IsNumeric(TxtInput.Text)Then '判断文本框中的内容是否是数字 MsgBox "请输入正确的半径值!",64,"信息提'输示入"正确半径值的提示 TxtInput.Text = "" '置文本框TxtInput的内容为空 TxtInput.SetFocus '使光标停留在文本框TxtInput中 Else Radius = Val(TxtInput.Text) '把文本框中半径的值赋值给变量Radius Area = Pi * Radius^2 '计算圆的面积 LabShow.Caption = "圆的面积为:" & Area '显示圆的面积 TxtResult.Text = Area '显示计算结果 End If Case 2 If TxtInput.Text = "" Then '判断文本框中的内容是否为空 MsgBox "请输入半径!",64,"信息提示" '输入半径的提示 TxtInput.Text = "" '置文本框TxtInput的内容为空 TxtInput.SetFocus '使光标停留在文本框TxtInput中 ElseIf Not IsNumeric(TxtInput.Text)Then '判断文本框中的内容是否是数字 MsgBox "请输入正确的半径值!",64,"信息提'输示入"正确半径值的提示 TxtInput.Text = "" '置文本框TxtInput的内容为空 TxtInput.SetFocus '使光标停留在文本框TxtInput中 Else Radius = Val(TxtInput.Text) '把文本框中半径的值赋值给变量 Radius Volume = 4 / 3 * Pi * Radius^3 '计算圆的体积 LabShow.Caption = "圆的面积为:" & Volume'显示圆的体积 TxtResult.Text = Volume '显示计算结果 End If End Select End Sub '命令按钮CmdExit的Click事件 Private Sub CmdExit_Click() Unload Me '卸载窗体 End Sub '清空输入半径事件 Private Sub CmdNull_Click() TxtInput.Text = "" '清空文本框TxtInput中的内容 TxtInput.SetFocus '使光标停留在文本框TxtInput中 TxtResult.Text = "" '清空文本框TxtResult中的内容 LabShow.Caption = vbNullString '清空标签LabShow中的内容 CmbType.ListIndex = -1 '使得组合框的ListIndex属性值指向最初的前 一项 End Sub '初始化组合框,添加计算类型 Private Sub Form_Load() CmbType.AddItem "周长" '在组合框中添加"周长"项 CmbType.AddItem "面积" '在组合框中添加"面积"项 CmbType.AddItem "体积" '在组合框中添加"体积"项 End Sub
单击工具栏中的保存按钮,保存工程,然后单击工具栏中的启动按钮,运行工程。当选择组合框中的“周长”项时,程序运行结果如图5.16所示。当选择组合框中的“面积”项时,程序运行结果如图5.17所示。当选择组合框中的“体积”项时,程序运行结果如图5.18所示。当单击“清空半径值”按钮时,程序运行结果如图5.19所示。
图5.16 圆的周长计算结果图
图5.17 圆的面积计算结果图
图5.18 圆的体积计算结果图
图5.19 清空后的结果图
然后单击工具栏中的结束按钮,或者单击运行窗口的关闭按钮,结束程序的运行。
源程序解读
(1)代码首先定义一个常量Pi=3.1415表示圆周率。并定义四个单精度变量Perimeter、Radius、Area和Volume,分别表示圆的周长、半径、面积和体积。
(2)在Form_ Load()事件中,初始化“CmbType”组合框。添加计算类型子项分别为:周长,面积,体积。
(3)当单击“CmbType”组合框时,就触发CmbType的Click事件。
(4)在CmbType_ Click()事件中,运用Select Case,根据组合框控件ListIndex属性的值分别计算圆的周长、面积和体积。
(5)在周长的计算过程中,首先判断显示半径的文本框是否为空。如果为空,则由MsgBox函数提示框提示输入半径。然后把文本框置空,并把光标停留在文本框上。否则,判断文本框中的内容是否是数字。如果不是,则由MsgBox函数提示框提示输入正确的半径。然后把文本框置空,并把光标停留在文本框上。否则,把文本框中的内容赋值给变量Radius。然后,按照公式计算圆的周长,并把计算结果由文本框TxtResult显示出来,把计算类型和结果由“LabShow”标签显示出来。
(6)圆的面积和体积的计算过程与周长的计算过程除了计算公式不同外,其他都一样。
(7)当单击“CmdNull”命令按钮时,就触发CmdNull_ Click()事件。在该事件过程中,把“TxtInput”文本框和“TxtResult”文本框以及“LabShow”标签的内容分别置空,并把光标停留在文本框TxtInput上。然后,把“CmbType”组合框的ListIndex属性置为-1,在重新计算时,组合框中不显示添加的项。
(8)当单击“CmdExit”命令按钮时,就触发CmdExit_ Click()事件。在该事件中,运用Unload语句,卸载当前窗体。