Visual Basic实例精通
上QQ阅读APP看书,第一时间看更新

第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语句,卸载当前窗体。