Visual Basic程序設計教程 第2版 教學課件作者 劉瑞新 電子教案 第8章 變量與過程的作用范圍
《Visual Basic程序設計教程 第2版 教學課件作者 劉瑞新 電子教案 第8章 變量與過程的作用范圍》由會員分享,可在線閱讀,更多相關《Visual Basic程序設計教程 第2版 教學課件作者 劉瑞新 電子教案 第8章 變量與過程的作用范圍(43頁珍藏版)》請在裝配圖網上搜索。
1、在線教務輔導網:在線教務輔導網::/教材其余課件及動畫素材請查閱在線教務輔導網教材其余課件及動畫素材請查閱在線教務輔導網QQ:349134187 或者直接輸入下面地址:或者直接輸入下面地址:第第8 8章章 變量與過程的作用范圍變量與過程的作用范圍第第8 8章章 變量與過程的作用范圍變量與過程的作用范圍 在在VB中,應用程序是由假設干個過程組成的,這些過中,應用程序是由假設干個過程組成的,這些過程一般保存在窗體文件程一般保存在窗體文件.frm或標準模塊文件或標準模塊文件.bas中。變量在過程中是必不可少的。根據變量或過程所處的中。變量在過程中是必不可少的。根據變量或過程所處的不同位置,可被訪問的
2、范圍是不相同的。變量與過程可被不同位置,可被訪問的范圍是不相同的。變量與過程可被訪問的范圍稱為變量與過程的作用域。訪問的范圍稱為變量與過程的作用域。v8.1 代碼模塊的概念代碼模塊的概念 在建立在建立VB的應用程序時,應首先設計代碼的結構。的應用程序時,應首先設計代碼的結構。VB應用程序的結構通常如圖應用程序的結構通常如圖8-1所示。所示。圖圖8-1 VB應用程序的結構應用程序的結構函數過程(Function)Sub過程事件過程窗體模塊.Frm類模塊.ClsSub過程函數過程(Function)標準模塊.BasVB應用程序.VBP VB將代碼存儲在將代碼存儲在3種不同的模塊中:窗體模塊種不同的
3、模塊中:窗體模塊(窗體窗體)、標準模塊模塊和類模塊。在這標準模塊模塊和類模塊。在這3種模塊中都可以包含種模塊中都可以包含聲明常數、變量、動態(tài)鏈接庫聲明常數、變量、動態(tài)鏈接庫DLL的聲明和過程的聲明和過程Sub、Function、Property過程。它們形成了工程的一過程。它們形成了工程的一種模塊層次結構,可以較好地組織工程,同時也便于代碼種模塊層次結構,可以較好地組織工程,同時也便于代碼的維護,如圖的維護,如圖8-2所示。所示。圖圖8-2 工程中的模塊工程中的模塊8.1.1 8.1.1 窗體模塊窗體模塊 每個窗體對應一個窗體模塊,窗體模塊包每個窗體對應一個窗體模塊,窗體模塊包含窗體及其控件的
4、屬性設置、窗體變量的說含窗體及其控件的屬性設置、窗體變量的說明、事件過程、窗體內的通用過程、外部過明、事件過程、窗體內的通用過程、外部過程的窗體級聲明。程的窗體級聲明。窗體模塊保存在擴展名為窗體模塊保存在擴展名為.frm.frm的文件中。默的文件中。默認時應用程序中只有一個窗體,因此有一個認時應用程序中只有一個窗體,因此有一個以以.frm.frm為擴展名的窗體模塊文件。如果應用程為擴展名的窗體模塊文件。如果應用程序有多個窗體,就會有多個以序有多個窗體,就會有多個以.frm.frm為擴展名的為擴展名的窗體模塊文件。窗體模塊文件。如果要在文本編輯器中觀察窗體模塊,那如果要在文本編輯器中觀察窗體模塊
5、,那么還會看到窗體及其控件的描述,包括它們么還會看到窗體及其控件的描述,包括它們的屬性設置值,如圖的屬性設置值,如圖8-38-3所示。窗體模塊中也所示。窗體模塊中也可以引用該應用程序內的其他窗體或對象??梢砸迷搼贸绦騼鹊钠渌绑w或對象。從從“工程菜單中執(zhí)行工程菜單中執(zhí)行“添加窗體命令,可添加窗體命令,可以添加新窗體模塊。以添加新窗體模塊。8.1.2 8.1.2 標準模塊標準模塊 標準模塊保存在擴展名為標準模塊保存在擴展名為.bas.bas的文件中,的文件中,缺省時應用程序中不包含標準模塊。標準模缺省時應用程序中不包含標準模塊。標準模塊可以包含公有或模塊級的變量、常數、類塊可以包含公有或模塊
6、級的變量、常數、類型、外部過程和全局過程的全局聲明或模塊型、外部過程和全局過程的全局聲明或模塊級聲明。缺省時,標準模塊中的代碼是公有級聲明。缺省時,標準模塊中的代碼是公有的,任何窗體或模塊中的事件過程或通用過的,任何窗體或模塊中的事件過程或通用過程都可以調用它。寫入標準模塊的代碼不必程都可以調用它。寫入標準模塊的代碼不必綁在特定的應用程序上,在許多不同的應用綁在特定的應用程序上,在許多不同的應用程序中可以重用標準模塊。在標準模塊中可程序中可以重用標準模塊。在標準模塊中可以存儲通用過程,但不能存儲事件過程。以存儲通用過程,但不能存儲事件過程。從從“工程菜單中執(zhí)行工程菜單中執(zhí)行“添加模塊命令,可添
7、加模塊命令,可以在工程中添加標準模塊。以在工程中添加標準模塊。8.1.3 8.1.3 類模塊類模塊 在在VBVB中,類模塊文件擴展名為中,類模塊文件擴展名為.cls.cls是是面向對象編程的根底。程序員可在類模塊中面向對象編程的根底。程序員可在類模塊中編寫代碼建立新對象,這些新對象可以包含編寫代碼建立新對象,這些新對象可以包含自定義的屬性和方法,可以在應用程序內的自定義的屬性和方法,可以在應用程序內的過程中使用。實際上,窗體本身正是這樣一過程中使用。實際上,窗體本身正是這樣一種類模塊,在其上可安放控件、可顯示窗體種類模塊,在其上可安放控件、可顯示窗體窗口。窗口。類模塊與標準模塊的不同之處在于標
8、準模類模塊與標準模塊的不同之處在于標準模塊僅僅含有代碼,而類模塊既含有代碼又含塊僅僅含有代碼,而類模塊既含有代碼又含有數據,類模塊可以視為沒有物理表示的對有數據,類模塊可以視為沒有物理表示的對象。象。v8.2 變量的作用范圍變量的作用范圍v 變量的作用范圍作用域指變量能變量的作用范圍作用域指變量能被某一過程識別的范圍。當一個應用程序被某一過程識別的范圍。當一個應用程序中出現多個過程或函數時,在它們各自的中出現多個過程或函數時,在它們各自的子程序中都可以定義自己的常量、變量。子程序中都可以定義自己的常量、變量。這時,自然會提出一個問題,這些常量或這時,自然會提出一個問題,這些常量或變量是否在程序
9、中到處可用?答復是否認變量是否在程序中到處可用?答復是否認的。的。v 在在VB中,可以在過程或模塊中聲明中,可以在過程或模塊中聲明變量,根據聲明變量的位置,變量分為兩變量,根據聲明變量的位置,變量分為兩類:過程級變量類:過程級變量Procedure level和和模塊級變量模塊級變量Module level。v 按照作用范圍分類,過程級變量屬于按照作用范圍分類,過程級變量屬于局部變量,而模塊級變量那么屬于全局變局部變量,而模塊級變量那么屬于全局變量。量。8.2.1 8.2.1 過程級變量過程級變量 在一個過程內部使用在一個過程內部使用DimDim或或StaticStatic關鍵字聲關鍵字聲明變
10、量時,只有該過程內部的代碼才能訪問明變量時,只有該過程內部的代碼才能訪問或改變該變量的值,因此被稱為或改變該變量的值,因此被稱為“過程級變量過程級變量。過程級變量的作用范圍限制在該過程內。過程級變量的作用范圍限制在該過程內部。例如:部。例如:Dim a As Integer,b As SingleDim a As Integer,b As SingleStatic s As StringStatic s As String 如果在過程中未作說明而直接使用某個變如果在過程中未作說明而直接使用某個變量,該變量也被當成過程級變量。用量,該變量也被當成過程級變量。用StaticStatic說說明的變量
11、在應用程序的整個運行過程中都一明的變量在應用程序的整個運行過程中都一直存在,而用直存在,而用DimDim說明的變量只在過程執(zhí)行時說明的變量只在過程執(zhí)行時存在,退出過程后,這類變量就會消失。存在,退出過程后,這類變量就會消失。過程級變量屬于局部變量,只能在建立的過程級變量屬于局部變量,只能在建立的過程內有效,即使是在主程序中建立的變量,過程內有效,即使是在主程序中建立的變量,也不能在被調用的子過程中使用。也不能在被調用的子過程中使用?!纠纠?-1】過程級局部變量例如。】過程級局部變量例如。Private Sub Form_Activate()Dim a As Integer,b As Inte
12、ger,c As Integer 過程過程級局部變量級局部變量 a=5:b=3 Print Print Tab(15);a;Tab(25);b;Tab(35);c=a*b Print 調用調用Prod前前;Tab(14);a;Tab(24);b;Tab(34);c Call Prod Print 調用調用Prod后后;Tab(14);a;Tab(24);b;Tab(34);c Print Print 調用調用Sum前前;Tab(14);a;Tab(24);b;Tab(34);c Call Sum Print 調用調用Sum后后;Tab(14);a;Tab(24);b;Tab(34);cEnd
13、SubSub Prod()通用過程通用過程Dim a As Integer,b As Integer,c As Integer 過程過程級局部變量級局部變量圖圖8-7 程序運行結果程序運行結果 c=a*b Print Prod子過程;Tab(14);a;Tab(24);b;Tab(34);cEnd SubSub Sum()通用過程 Dim a As Integer,b As Integer,c As Integer 過程級局部變量 c=a+b Print Sum子過程;Tab(14);a;Tab(24);b;Tab(34);cEnd Sub 程序的運行結果如圖程序的運行結果如圖8-7所示。從上
14、面程序的運行結果可所示。從上面程序的運行結果可以看出,主程序中的變量沒有帶到子過程中。以看出,主程序中的變量沒有帶到子過程中。8.2.2 8.2.2 模塊級變量模塊級變量 在模塊的通用段中聲明的變量屬于模塊級變量。模塊級在模塊的通用段中聲明的變量屬于模塊級變量。模塊級變量分為私有和公有。變量分為私有和公有。1.私有的模塊級變量私有的模塊級變量 私有的模塊級變量在聲明它的整個模塊的所有過程中都私有的模塊級變量在聲明它的整個模塊的所有過程中都能使用,但其他模塊卻不能訪問該變量。聲明方法是在模能使用,但其他模塊卻不能訪問該變量。聲明方法是在模塊的通用段中使用塊的通用段中使用Private或或Dim關
15、鍵字聲明變量。例如:關鍵字聲明變量。例如:Private s As StringDim a As Integer,b As Single 在模塊的通用段中使用在模塊的通用段中使用Private或或Dim作用相同,但使用作用相同,但使用Private會提高代碼的可讀性。會提高代碼的可讀性。2.公有的模塊級變量公有的模塊級變量 公有的模塊級變量在所有模塊中的所有過程中都公有的模塊級變量在所有模塊中的所有過程中都能使用。它的作用范圍是整個應用程序,因此公有能使用。它的作用范圍是整個應用程序,因此公有模塊級變量屬于全局變量。聲明方法是在模塊的通模塊級變量屬于全局變量。聲明方法是在模塊的通用段中使用用段
16、中使用Public關鍵字聲明變量。例如:關鍵字聲明變量。例如:Public a As Integer,b As Single 全局變量是指在所有程序包括主程序和過程全局變量是指在所有程序包括主程序和過程中都可以使用的內存變量。就像在一個過程中定義中都可以使用的內存變量。就像在一個過程中定義的變量一樣,在子過程中可以任意改變和調用全局的變量一樣,在子過程中可以任意改變和調用全局變量,當子過程執(zhí)行完后,其值又帶回主程序。變量,當子過程執(zhí)行完后,其值又帶回主程序。把變量定義為全局變量雖然很方便,但這樣會增把變量定義為全局變量雖然很方便,但這樣會增加變量在程序中被無意修改的時機,因此,如果有加變量在程
17、序中被無意修改的時機,因此,如果有更好的處理變量的方法,就不要聲明全局變量。另更好的處理變量的方法,就不要聲明全局變量。另外,用外,用Const語句定義的符號常量也能聲明為全局語句定義的符號常量也能聲明為全局的。的?!纠纠?-2】公有的模塊級全局變量例如?!抗械哪K級全局變量例如。Public a As Integer,b As Integer,c As Integer 寫在寫在“(通用通用)的的“(聲明聲明)中中Private Sub Form_Activate()事件事件過程過程 a=5:b=3 Print Tab(15);a;Tab(25);b;Tab(35);c=a*b Print
18、 調用調用Prod前前;Tab(14);a;Tab(24);b;Tab(34);c Call Prod Print 調用調用Prod后后;Tab(14);a;Tab(24);b;Tab(34);c Print Print Tab(15);a;Tab(25);b;Tab(35);c=a+b Print 調用調用Sum前前;Tab(14);a;Tab(24);b;Tab(34);c Call Sum Print 調用調用Sum后后;Tab(14);a;Tab(24);b;Tab(34);cEnd Sub圖圖8-8 程序運行結果程序運行結果Sub Prod()通用過程 c=a*b Print Pro
19、d子過程;Tab(14);a;Tab(24);b;Tab(34);cEnd SubSub Sum()通用過程 c=a+b Print Sum子過程;Tab(14);a;Tab(24);b;Tab(34);cEnd Sub 程序的運行結果如圖程序的運行結果如圖8-8所示。從程序的運行結果可以看所示。從程序的運行結果可以看出,在模塊級中用出,在模塊級中用Public聲明的全程變量聲明的全程變量a、b、c,在各過,在各過程中都能訪問和修改。程中都能訪問和修改。8.2.3 8.2.3 變量的生存期變量的生存期 從變量的作用空間來說,變量有作用范圍;從變量的作用空間來說,變量有作用范圍;從變量的作用時間
20、來說,變量有生存期。從變量的作用時間來說,變量有生存期。假設過程內部有一個變量,當程序運行進假設過程內部有一個變量,當程序運行進入該過程時,要分配給該變量一定的內存單入該過程時,要分配給該變量一定的內存單元,一旦程序退出該過程,變量占有的內存元,一旦程序退出該過程,變量占有的內存單元是釋放還是保存,根據變量在程序運行單元是釋放還是保存,根據變量在程序運行期間的生命周期,把變量分為靜態(tài)變量期間的生命周期,把變量分為靜態(tài)變量StaticStatic和動態(tài)變量和動態(tài)變量DynamicDynamic。靜態(tài)變。靜態(tài)變量不釋放內存單元,動態(tài)變量釋放內存單元,量不釋放內存單元,動態(tài)變量釋放內存單元,有時候可
21、能需要某些局部變量是靜態(tài)變量,有時候可能需要某些局部變量是靜態(tài)變量,而其他變量那么為動態(tài)變量。而其他變量那么為動態(tài)變量?!纠纠?-3】下面程序說明了】下面程序說明了Static關鍵字的作用。關鍵字的作用。Private Sub Form_Activate()Dim i As Integer For i=1 To 6 TestSub Next iEnd SubSub TestSub()Dim x As Integer,m As String圖圖8-9 程序運行結果程序運行結果 Static y,n x=x+1:y=y+1 m=m&*:n=n&*Print x=;x;y=;y,m=;m,n=;n
22、End Sub 程序的運行結果如圖程序的運行結果如圖8-9所示。所示。說明:說明:x、y、m、n都是過程都是過程TestSub中的局部變量,中的局部變量,y、n被說明為被說明為Static變量,每次調用保持上一次的值,變量,每次調用保持上一次的值,y、n的的值會變化;值會變化;x、m是動態(tài)變量,每次調用都被重新初始化是動態(tài)變量,每次調用都被重新初始化為為0或或,它們的值總是不變。,它們的值總是不變。為使過程中所有的局部變量為靜態(tài)變量,可在過程頭的為使過程中所有的局部變量為靜態(tài)變量,可在過程頭的起始處加上起始處加上Static關鍵字。例如:關鍵字。例如:Static Function Runni
23、ngTotal(num)這就使過程中的所有局部變量都變?yōu)殪o態(tài),無論它們是這就使過程中的所有局部變量都變?yōu)殪o態(tài),無論它們是用用Static、Dim或或Private聲明的還是隱式聲明的。聲明的還是隱式聲明的。v8.3 過程的作用范圍過程的作用范圍v 過程也有作用的范圍作用域,在過程也有作用的范圍作用域,在VB中,過程的作用域分為模塊級或稱中,過程的作用域分為模塊級或稱文件級和全局級或稱工程級。文件級和全局級或稱工程級。v8.3.1 模塊級過程模塊級過程v 模塊級過程是在某個模塊文件內模塊級過程是在某個模塊文件內定義的過程。如果在定義的過程。如果在Sub或或Function前加前加關鍵字關鍵字Pr
24、ivate,那么該過程只能被在本,那么該過程只能被在本模塊文件中定義的過程調用。即其作模塊文件中定義的過程調用。即其作用域為本模塊文件。用域為本模塊文件。8.3.2 8.3.2 全局級過程全局級過程 全局級過程是在定義過程時,在全局級過程是在定義過程時,在SubSub或或FunctionFunction前加關鍵字前加關鍵字PublicPublic可以默認。全可以默認。全局級過程可被整個應用程序所有模塊文件局級過程可被整個應用程序所有模塊文件中定義的過程調用。即其作用域為整個應用中定義的過程調用。即其作用域為整個應用程序工程。程序工程。8.3.3 8.3.3 調用其他模塊中的過程調用其他模塊中的
25、過程 在工程中的任何地方都能調用其他模塊中在工程中的任何地方都能調用其他模塊中的全局過程。調用其他模塊中的過程的各種的全局過程。調用其他模塊中的過程的各種技巧,取決于該過程是在窗體模塊中、類模技巧,取決于該過程是在窗體模塊中、類模塊中還是標準模塊中。塊中還是標準模塊中。(1)(1)調用窗體中的過程調用窗體中的過程 所有窗體模塊的外部調用必須指向包含此所有窗體模塊的外部調用必須指向包含此過程的窗體模塊。如果在窗體模塊過程的窗體模塊。如果在窗體模塊Form1Form1中包中包含含SomeSubSomeSub過程,那么可使用下面的語句調過程,那么可使用下面的語句調用用Form1Form1中的過程:中
26、的過程:Call Form1.SomeSub(arguments)Call Form1.SomeSub(arguments)(2)調用類模塊中的過程調用類模塊中的過程 與窗體中調用過程類似,在類模塊中調用過程要調用與與窗體中調用過程類似,在類模塊中調用過程要調用與過程一致并且指向類實例的變量。例如,過程一致并且指向類實例的變量。例如,DemoClass是類是類Class1的實例:的實例:Dim DemoClass as New Class1 不同于窗體的是,在引用一個類的實例時,不能用類名不同于窗體的是,在引用一個類的實例時,不能用類名作限定符。必須首先聲明類的實例為對象變量在這個例作限定符。
27、必須首先聲明類的實例為對象變量在這個例子中是子中是DemoClass,并用變量名引用它。,并用變量名引用它。(3)調用標準模塊中的過程調用標準模塊中的過程 如果過程名是唯一的,那么不必在調用時加模塊名。無如果過程名是唯一的,那么不必在調用時加模塊名。無論是在模塊內,還是在模塊外調用,結果總會引用這個唯論是在模塊內,還是在模塊外調用,結果總會引用這個唯一過程。如過程僅出現在一個地方,這個過程就是唯一的。一過程。如過程僅出現在一個地方,這個過程就是唯一的。如果兩個以上的模塊都包含同名的過程,那就有必要用模如果兩個以上的模塊都包含同名的過程,那就有必要用模塊名來限定了。塊名來限定了。例 如,假 設
28、在例 如,假 設 在 M o d u l e 1 中 調 用中 調 用 M o d u l e 2 中 的中 的CommonName過程,要用下面的語句:過程,要用下面的語句:Module2.CommonName(arguments)【例【例8-4】全局級過程的調用,如圖】全局級過程的調用,如圖8-10所示。所示。應用程序工程中包括兩個窗體應用程序工程中包括兩個窗體Forml、Form2和一和一個標準模塊個標準模塊Module1。在。在Forml窗體中定義了一個計算矩窗體中定義了一個計算矩形面積的全局級形面積的全局級Function過程,在標準模塊過程,在標準模塊Module1中定中定義了一個
29、計算矩形周長的全局級義了一個計算矩形周長的全局級Function過程。過程。兩個窗體中的命令按鈕組的兩個窗體中的命令按鈕組的Click事件過程功能相同,差事件過程功能相同,差異是調用異是調用Function過程時所使用的名字。過程時所使用的名字。圖圖8-10 不同窗體對過程的調用不同窗體對過程的調用 Form1窗體模塊中的過程代碼如下:窗體模塊中的過程代碼如下:Public Function Area(x As Single,y As Single)As Single Area=x*yEnd FunctionPrivate Sub Command1_Click(index As Integer
30、)Dim a As Single,b As Single a=Val(Text1(0).Text)b=Val(Text1(1).Text)n=index If n=0 Then Label2(0).Caption=Area(a,b)Else Label2(1).Caption=Perimeter(a,b)End IfEnd SubPrivate Sub Form_Load()End Sub Form2窗體模塊中的過程代碼如下:窗體模塊中的過程代碼如下:Private Sub Command1_Click(index As Integer)Dim a As Single,b As Single
31、a=Val(Text1(0).Text)b=Val(Text1(1).Text)n=index If n=0 Then Label2(0).Caption=Form1.Area(a,b)Else Label2(1).Caption=Perimeter(a,b)End IfEnd Sub 標準模塊標準模塊Module1中的過程代碼:中的過程代碼:Public Function Perimeter(x As Single,y As Single)As Single Perimeter=2*(x+y)End Functionv8.4 用戶定義類型用戶定義類型v8.4.1 用戶定義類型的概念用戶定義類
32、型的概念v 假設某校的學生成績見表假設某校的學生成績見表8-1。v表表8-1 學生成績表學生成績表v表中每列的數據類型相同,都是前面介表中每列的數據類型相同,都是前面介紹過的根本數據類型,在每一行中卻有著紹過的根本數據類型,在每一行中卻有著不同的數據類型。雖然使用不同的數據類型。雖然使用VB的的Variant數組允許數組內的元素有不同的數據類型,數組允許數組內的元素有不同的數據類型,但卻比較浪費內存。此時,但卻比較浪費內存。此時,VB允許將根允許將根本數據類型按需要組合起來,創(chuàng)立自定義本數據類型按需要組合起來,創(chuàng)立自定義的數據類型:用戶定義類型的數據類型:用戶定義類型User Defined
33、Type。學 號姓 名性 別出生日期語 文數 學總 分99310李小華男1985年2月22日859518099103張紅玉女1986年5月18日73.587160.599311樊利友男1984年9月21日8279161 用戶定義類型又被稱為用戶定義類型又被稱為“記錄類型,類似于記錄類型,類似于C語言中語言中的的“結構。它是一個由假設干個根本類型的數據項組合結構。它是一個由假設干個根本類型的數據項組合而成的組合項。如表而成的組合項。如表8-1中的每一列都是根本類型的數據中的每一列都是根本類型的數據項,分別描述同一對象學生的不同屬性,稱為字段項,分別描述同一對象學生的不同屬性,稱為字段或稱為數據項
34、,字段的名稱,如學號、姓名、性別、或稱為數據項,字段的名稱,如學號、姓名、性別、出生日期等稱為字段名或稱數據項名。表中的記錄類出生日期等稱為字段名或稱數據項名。表中的記錄類型就是由這型就是由這7個數據項組成,其中每個學生的個數據項組成,其中每個學生的7個具體屬性個具體屬性值的集合就是記錄值簡稱記錄,表中共有值的集合就是記錄值簡稱記錄,表中共有3個記錄值,個記錄值,每位學生有每位學生有1個記錄。如果該校有個記錄。如果該校有2000名學生,那么該校名學生,那么該校學生成績數據文件中就應該有學生成績數據文件中就應該有2000個記錄。個記錄。8.4.2 8.4.2 創(chuàng)立用戶定義類型創(chuàng)立用戶定義類型 可
35、以用可以用TypeType語句創(chuàng)立用戶定義的類型,該語句創(chuàng)立用戶定義的類型,該語句必須置于模塊的聲明局部。其格式為:語句必須置于模塊的聲明局部。其格式為:Private|Public Type Private|Public Type 用戶類型名用戶類型名 字段名字段名1 1 As As 類型類型1 1 字段名字段名2 2 As As 類型類型2 2 字段名字段名n n As As 類型類型n n End TypeEnd Type 8.4.2 8.4.2 創(chuàng)立用戶定義類型創(chuàng)立用戶定義類型例如,要建立一個學生成績處理程序,由于例如,要建立一個學生成績處理程序,由于每一位學生都需要學號、姓名、學分和
36、平均每一位學生都需要學號、姓名、學分和平均成績等數據項字段,那么可以使用成績等數據項字段,那么可以使用TypeType語句來定義一個名稱為語句來定義一個名稱為studentrecstudentrec的記錄。的記錄。Private Type studentrecPrivate Type studentrec stunum As String stunum As String*6 6 學號元素學號元素為為6 6個字符的定長字符串個字符的定長字符串 names As String names As String*8 8 姓名元素姓名元素為為8 8個字符的定長字符串個字符的定長字符串 credit A
37、s Integer credit As Integer 學學分元素為整型分元素為整型 avg As Single avg As Single 平平均成績?yōu)閱尉刃途煽優(yōu)閱尉刃虴nd TypeEnd Type8.4.3 8.4.3 建立和使用用戶定義類型變量建立和使用用戶定義類型變量 在使用用戶定義類型之前,必須用在使用用戶定義類型之前,必須用TypeType語語句創(chuàng)立數據類型。句創(chuàng)立數據類型。1.1.建立用戶定義類型變量建立用戶定義類型變量 用戶定義類型被創(chuàng)立后,可以用用戶定義類型被創(chuàng)立后,可以用DimDim、RedimRedim、StaticStatic建立一個具有這種數據類型的建立一個
38、具有這種數據類型的變量。例如定義一個具有變量。例如定義一個具有studentrecstudentrec類型類型的變量的變量stustu:Dim stu AS studentrecDim stu AS studentrec 用戶定義類型也可以作為數組元素的數據用戶定義類型也可以作為數組元素的數據類型。例如,定義一個擁有類型。例如,定義一個擁有100100個記錄元素的個記錄元素的數組數組studentstudent:Dim student(1 To 100)As studentrecDim student(1 To 100)As studentrec2.使用用戶定義類型變量使用用戶定義類型變量 如
39、果要存取用戶定義類型變量中的某個字段的數如果要存取用戶定義類型變量中的某個字段的數據,其格式如下。據,其格式如下。用戶數據類型變量名用戶數據類型變量名.字段名字段名 例如,要存取用戶定義類型變量例如,要存取用戶定義類型變量stu中中names這這個字段的數據,要寫為:。個字段的數據,要寫為:。【例【例8-5】把數據值分別賦給】把數據值分別賦給stu變量中的各個字段。變量中的各個字段。首先在窗體模塊的通用段創(chuàng)立用戶定義類型:首先在窗體模塊的通用段創(chuàng)立用戶定義類型:Private Type studentrec stunum As String*6 學號元素學號元素為為6個字符的定長字符串個字符的
40、定長字符串 names As String*8 姓名元素姓名元素為為8個字符的定長字符串個字符的定長字符串 credit As Integer 學分元素為整型學分元素為整型 avg As Single 平均成績?yōu)閱尉骄煽優(yōu)閱尉刃投刃虴nd Type 編寫命令按鈕的編寫命令按鈕的Click事件代碼:事件代碼:Private Sub Command1_Click()Dim stu As studentrec 定義一個具有studentrec類型的變量stu =990001 =王 平 =65 =88 Text1(0).Text=Text1(1).Text=Text1(2).Text=Text1
41、(3).Text=End Sub圖圖8-11 運行結果運行結果 程序運行結果如圖程序運行結果如圖8-11所示。所示。8.4.4 8.4.4 用戶定義類型數組用戶定義類型數組 如果一個數組中元素的數據類型是用戶定如果一個數組中元素的數據類型是用戶定義類型,那么稱為用戶定義類型數組或記錄義類型,那么稱為用戶定義類型數組或記錄數組數組Array of recordsArray of records。存取記錄數組元。存取記錄數組元素的某個字段數據的語法為:素的某個字段數據的語法為:記錄數組元素記錄數組元素.字段名字段名 例如,存取第例如,存取第1 1、第、第2828位學生的平均分數,位學生的平均分數,
42、要寫為要寫為student(1).avgstudent(1).avgstudent(28).avgstudent(28).avg8.4.4 8.4.4 用戶定義類型數組用戶定義類型數組【例【例8-68-6】假設某班有】假設某班有5050位學生,每位學生一位學生,每位學生一個記錄,定義一個包含個記錄,定義一個包含5050個元素的用戶定義個元素的用戶定義數組,并給第數組,并給第3232位學生賦值。位學生賦值。首先在窗體模塊的通用段創(chuàng)立用戶定義類首先在窗體模塊的通用段創(chuàng)立用戶定義類型:型:Private Type studentrecPrivate Type studentrec stunum As
43、 String stunum As String*6 6 names As String names As String*8 8 credit As Integer credit As Integer avg As Single avg As SingleEnd TypeEnd Type 編寫命令按鈕的編寫命令按鈕的Click事件代碼:事件代碼:Private Sub Command1_Click()Dim student(1 To 50)As studentrec 定義記錄數組定義記錄數組 student(32).stunum=960001 student(32).names=張大力張大力
44、student(32).credit=65 student(32).avg=88 Text1(0).Text=student(32).stunum Text1(1).Text=student(32).names Text1(2).Text=student(32).credit Text1(3).Text=student(32).avgEnd Sub8.4.5 8.4.5 程序舉例程序舉例【例【例8-78-7】輸入學生的姓名、學號、語文分數、】輸入學生的姓名、學號、語文分數、英語分數、數學分數,計算每名學生的個人英語分數、數學分數,計算每名學生的個人平均成績,并顯示學生的各科成績,如圖平均成績,
45、并顯示學生的各科成績,如圖8-8-1212所示。所示。首先在窗體的通用段創(chuàng)立用戶定義類型并首先在窗體的通用段創(chuàng)立用戶定義類型并且聲明變量:且聲明變量:Private Type studentRecordPrivate Type studentRecord name As String name As String*6 6 姓姓名變量定義為名變量定義為6 6個字符長度個字符長度 studentNum As String studentNum As String*5 5 學號變量定義為學號變量定義為5 5個字符長度個字符長度 chinese As Single chinese As Single
46、語語文變量定義為單精度數文變量定義為單精度數 english As Single english As Single 英英語變量定義為單精度數語變量定義為單精度數 math As Single math As Single 數學變量數學變量定義為單精度數定義為單精度數 average As Single average As Single 平平均成績定義為單精度數均成績定義為單精度數End TypeEnd TypeDim stu()As studentRecordDim stu()As studentRecord 定定義記錄數組義記錄數組 編寫窗體的編寫窗體的Load事件代碼:事件代碼:Pri
47、vate Sub Form_Load()ReDim stu(0)End Sub編寫編寫“輸入按鈕輸入按鈕Command1的的Click事件代碼:事件代碼:圖圖8-12 顯示學生成績顯示學生成績Private Sub Command1_Click()n=UBound(stu)ReDim stu(n+1)With stu(n+1).studentNum=Text1(0).Text .name=Text1(1).Text .chinese=Text1(2).Text .english=Text1(3).Text .math=Text1(4).Text .average=Int(.chinese+.e
48、nglish+.math)/3*100)/100 cc=Format(.chinese,)&Format(.english,)&_ Format(.math,)&Format(Str(.average),)List1.AddItem Format(RTrim(.studentNum),)&_ Format(RTrim(.name),)&cc End With Text1(0).SetFocusEnd Sub 編寫編寫“刪除按鈕刪除按鈕Command2的的Click事件代碼:事件代碼:Private Sub Command2_Click()If List1.ListIndex=1 Then Ms
49、gBox 請選定欲刪除的項!請選定欲刪除的項!Exit Sub End If n=List1.ListIndex+1 For i=n To UBound(stu)1 stu(i)=stu(i+1)Next List1.RemoveItem n-1 Text1(0).Text=stu(1).studentNum Text1(1).Text=stu(1).name Text1(2).Text=stu(1).chinese Text1(3).Text=stu(1).english Text1(4).Text=stu(1).mathEnd Sub 編寫列表框編寫列表框List1的的Click事件代碼:
50、事件代碼:Private Sub List1_Click()n=List1.ListIndex+1 Text1(0).Text=stu(n).studentNum Text1(1).Text=stu(n).name Text1(2).Text=stu(n).chinese Text1(3).Text=stu(n).english Text1(4).Text=stu(n).mathEnd Sub 另外編寫文本框組的事件代碼,使之方便輸入:另外編寫文本框組的事件代碼,使之方便輸入:Private Sub Text1_GotFocus(Index As Integer)Text1(Index).SelStart=0 Text1(Index).SelLength=Len(Text1(Index).Text)End SubPrivate Sub Text1_KeyPress(Index As Integer,KeyAscii As Integer)If KeyAscii=13 Then i=IIf(Index=4,0,Index+1)Text1(i).SetFocus End IfEnd Sub
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。