官术网_书友最值得收藏!

  • Visual Basic實例精通
  • 柴相花等編著
  • 975字
  • 2019-03-01 14:47:20

第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語句,卸載當前窗體。

主站蜘蛛池模板: 昔阳县| 上林县| 镇原县| 东山县| 黄骅市| 建瓯市| 同江市| 吉林市| 建平县| 无为县| 沙湾县| 兰溪市| 太湖县| 黑河市| 绍兴县| 招远市| 平乐县| 尼木县| 赞皇县| 阿坝县| 南和县| 德庆县| 吴堡县| 大冶市| 广安市| 隆德县| 濮阳市| 鄂伦春自治旗| 江门市| 宁陕县| 奉化市| 泸西县| 淮安市| 白沙| 云安县| 大连市| 深水埗区| 宿松县| 南雄市| 五大连池市| 分宜县|