面向?qū)ο蟮某绦蛟O計課件_第1頁
面向?qū)ο蟮某绦蛟O計課件_第2頁
面向?qū)ο蟮某绦蛟O計課件_第3頁
面向?qū)ο蟮某绦蛟O計課件_第4頁
面向?qū)ο蟮某绦蛟O計課件_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、第13章 面向?qū)ο蟮某绦蛟O計面向?qū)ο蟮某绦蛟O計第13章 面向?qū)ο蟮某绦蛟O計 面向?qū)ο蟪绦蛟O計(OOP,Object-Oriented Programming)是目前主流程序設計方法,它取代了傳統(tǒng)的結(jié)構(gòu)化程序設計技術,代表著程序設計的發(fā)展方向。v13.1 面向?qū)ο蟪绦蛟O計概述 面向?qū)ο蟪绦蛟O計方法是由結(jié)構(gòu)化程序設計方法發(fā)展而來的,它擺脫了結(jié)構(gòu)化程序設計中需要對過程進行全面設計的方法(不但要告訴計算機“做什么”還要告訴計算機“怎么做”)。將所涉及的一切實體全部當作一個“對象”來看待,并且將這些對象分別歸屬到不同的“類”中。在程序杓剖通過更改對象的屬性、觸發(fā)對象的事件和調(diào)用對象的方法,控制程序的執(zhí)行

2、進程。而且在VB中使用的大多數(shù)對象都是系統(tǒng)以“控件類”的形式定義好的,程序員在使用時只需將其從工具箱中添加到窗體上(創(chuàng)建控件類的實例)即可。對于一些特殊的問題,程序員還可以創(chuàng)建自定義類或ActiveX控件。13.1.1 對象和類 對象(Object)是代碼和數(shù)據(jù)的集合,就像現(xiàn)實生活中的一個實體。如一只氣球是一個對象,一臺電腦也是一個對象。 在VB環(huán)境下,常用的對象有各種控件、窗體、菜單、應用程序的部件以及數(shù)據(jù)庫等。這些對象都具有屬性(數(shù)據(jù))和行為方式(方法)。簡單地說,屬性用于描述對象的一組特征,方法為對象實施一些動作,對象的動作常常需要觸發(fā)事件,而觸發(fā)事件又可以修改屬性。一個對象建立以后,其

3、操作可通過與該對象有關的屬性、事件和方法來描述。 “屬性”、“方法”和“事件”是對象的基本元素。在VB程序設計過程中,可以通過這三個基本元素來操縱和控制對象。 面向?qū)ο蟪绦蛟O計主要是建立在類和對象的基礎之上。通常的面向?qū)ο蟪绦蛟O計中的類都是由程序員自己開發(fā)的。而在VB中,類可以是系統(tǒng)設計好的,也可以由程序員根據(jù)需要自行設計。 在VB中,工具箱上的可視類圖標是系統(tǒng)設計好的標準控件類,此外還可以在“工程”菜單中執(zhí)行“部件”命令,加入大量的Active X控件。通過將這些類實例化,可以得到真正的控件對象。當程序員在窗體上“畫”出一個控件時,就自動將其轉(zhuǎn)化為對象了。 除了通過控件類產(chǎn)生控件對象外,VB

4、還提供了許多系統(tǒng)對象,如打印機(Printer)、剪貼板(Clipboard)、屏幕(Screen)、應用程序(App)等。 窗體是一個特例,它既是類,也是一個對象。當向一個工程添加一個新窗體時,實質(zhì)就由窗體類創(chuàng)建了一個窗體對象。窗體是控件對象的容器,也是應用程序的界面。13.1.2 類的繼承性 繼承性指的是一個新類可以從現(xiàn)有的類中派生出來,新類具有父類中所有的特性,直接繼承了父類的方法和數(shù)據(jù),新類的對象可以調(diào)用該類及父類的成員變量和成員函數(shù)。繼承是從一種對象類型構(gòu)造另一種對象類型的一個主要方法。利用繼承性,可以在已經(jīng)定義的對象類型基礎上創(chuàng)建更復雜、更專業(yè)的對象類型,只要加進所需屬性和方法,將

5、新對象與上級對象區(qū)別開來即可。 13.1.3 類的封裝性 任何程序都包含兩個部分:代碼和數(shù)據(jù)。在結(jié)構(gòu)化程序設計模式中,數(shù)據(jù)在內(nèi)存中進行分配,并由子程序和函數(shù)代碼處理;而在OOP模式中是將處理數(shù)據(jù)的代碼、數(shù)據(jù)的聲明和存儲封裝在一起。一個對象中的數(shù)據(jù)和代碼相對于程序的其余部分是不可見的,它能防止那些非期望的交互和非法的訪問。 封裝就是將對象的屬性和方法封裝到具有適當定義接口的容器中。對象接口提供的方法和屬性應使對象能夠如期使用。 封裝是一種信息隱蔽技術,用戶只能見到對象封裝界面上的信息,對象內(nèi)部對用戶是隱蔽的。封裝的目的在于將對象的使用者和設計者分開,使用者不必知道行為實現(xiàn)的細節(jié),只需用設計者提供

6、的消息來訪問該對象即可。13.1.4 類的多態(tài)性 所謂多態(tài)是指一個名字可具有多種語義,多態(tài)引用表示可引用多個類的實例。多態(tài)可為一種對象類定義一種方法的多種實現(xiàn)方案,這些方法是通過類型和可接受的參數(shù)來區(qū)分的。 多態(tài)性有時也指方法的重載。方法的重載是指同一個方法名在上下文中有不同的含義,是該類以統(tǒng)一的方式處理不同數(shù)據(jù)類型的一種手段。 從對象接收消息后的處理方式看,多態(tài)性指的是同一個消息被不同的對象接收時解釋為不同意義的能力。也就是說,同樣的消息被不同的類對象接收時,產(chǎn)生完全不同的行為。利用多態(tài)性,用戶能發(fā)送一般形式的消息,而將其所有實現(xiàn)的細節(jié)留給接收消息的對象去解決。v13.2 VB中預定義的類和

7、對象 VB中有各種對象,包括窗體、控件、屏幕、打印機等。這些對象是由VB系統(tǒng)提供的,稱為“預定義對象”。它們由系統(tǒng)建立,用戶可以直接使用但不能修改。13.2.1 通過控件類創(chuàng)建對象 VB中絕大多數(shù)預定義類都以控件的形式存放在控件工具箱中,稱為“控件類”。當把它們添加到窗體上后,實際上是完成了類的實例化操作,即創(chuàng)建了一個控件對象。 例如,工具中的命令按鈕控件CommandButton以一個圖標的形式存放在工具箱中,此時它是一個控件類,代表著不同大小、不同外觀樣式、不同文字提示的一組按鈕。如果雙擊將其添加到窗體上,就完成了類的實例化操作,在窗體上創(chuàng)建了一個確定的按鈕控件。此后可設置該對象的屬性,并

8、編寫需要的事件代碼或在代碼中調(diào)用對象的椒取13.2.2 通過代碼創(chuàng)建對象 在應用程序中可以使用代碼將預定義類和自定義類實例化,從而獲得一個對象。設計時首先需要在聲明段聲明一個對象變量,其語法格式為:Dim | Private | Public WithEvents 對象變量名 As 類名 在聲明了一個對象變量后可以在程序中任何地方使用Set語句為其賦值,即將類實例化。Set語句的語法格式為:Set 對象變量名=對象 對于控件對象可以使用Controls集合的Add方法實例化,其語法格式為:Controls.Add (ProgID, name, container)【例13-1】通過程序代碼動態(tài)

9、地創(chuàng)建一個命令按鈕控件,并編寫該按鈕的Click事件代碼。使得按鈕被單擊時能彈出一個信息框,程序運行結(jié)果如圖13-1所示。圖13-1 程序運行結(jié)果 程序設計步驟如下: 新建一個VB工程,打開代碼窗口。在聲明段聲明對象變量。 由于需要使用對象的事件,故應帶有WithEvents關鍵字Dim WithEvents ctlCommand As CommandButton 聲明ctlCommand為命令按鈕類型窗體裝入時執(zhí)行的事件代碼如下:Private Sub Form_Load() 實例化一個按鈕對象 Set ctlCommand = Controls.Add(VB.CommandButton,

10、ctlCommand1, Me) 設置CommandButton對象的大小及位置 ctlCommand.Width = 1000 設置按鈕的寬度 ctlCommand.Height = 400 設置按鈕的高度 ctlCommand.Top = 600 設置按鈕距頂端的距離 ctlCommand.Left = (Form1.Width - ctlCommand.Width) / 2 設置按鈕水平居中 設置CommandButton對象的標題屬性 ption = 請單擊 設置CommandButton為可見 ctlCommand.Visible = TrueEnd Sub 按鈕控件被單擊時執(zhí)行的事

11、件代碼如下:Private Sub ctlCommand_Click() MsgBox 這是由代碼創(chuàng)建的按鈕, 64, 提示End Subv13.3 在應用程序中創(chuàng)建和使用類 VB提供了類(Class)模塊讓用戶利用相關的屬性、方法和事件創(chuàng)建自己的類。類模塊的優(yōu)點是它們可以分別編譯并被其他Windows應用程序所使用。類模塊可以看作是沒有可視界面的控件。 無論是簡單的類還是復雜的類,其創(chuàng)建步驟基本一致,一般分為四個步驟:插入一個類模塊、定義類的屬性、添加類的方法、響應缺省事件和創(chuàng)建自定義事件。13.3.1 創(chuàng)建和使用自定義類 創(chuàng)建自定義類,首先需要向VB工程中添加一個“類模塊”。 類模塊創(chuàng)建后

12、,可雙擊“工程資源管理器”中類模塊的名稱進入類代碼編輯窗口,根據(jù)需要編寫相應的代碼。 例如,希望創(chuàng)建的類能實現(xiàn)將指定字符串逆轉(zhuǎn)的功能(如,輸入“0123456789”,得到“9876543210”),可在類模塊中編寫代碼如下: 在聲明段聲明全局變量Name,作為類的屬性。Public Name As String 聲明Name為全局變量(對象的屬性) 創(chuàng)建一個公用過程,作為類的方法。該方法用于將Name表示的字符串進行逆轉(zhuǎn)。Public Sub reverseName() 公共過程(對象的方法) Dim i As Integer Dim str As String For i = 1 To L

13、en(Name) str = Mid(Name, i, 1) & str 后取出的字符放置在前面 Next Name = str 將逆轉(zhuǎn)后的字符串賦值給全局變量NameEnd Sub圖13-5 程序運行結(jié)果如果希望在應用程序中使用自定義類,只需編寫命令按鈕的Click事件代碼如下:Private Sub Command1_Click() Dim myobject Set myobject = New Class1 = Text1.Text myobject.reverseName Text2.Text = End Sub 程序運行時,用戶可在Text1中輸入任意的一個字符串,單擊【逆轉(zhuǎn)

14、】按鈕將得到圖13-5所示的結(jié)果。 類模塊與標準模塊的不同點在于存儲數(shù)據(jù)的方法不同。標準模塊的數(shù)據(jù)只有一個備份,這就意味著一個公共變量的值改變后,在后面的程序中再次讀取該變量時,將得到改變后的值。而類模塊的數(shù)據(jù)是相對與類實例而獨立存在的,不同實例中的數(shù)據(jù)是相互隔離的。類實例中的數(shù)據(jù)只存在于對象的存活期,它隨對象的創(chuàng)建而創(chuàng)建,隨對象的撤銷而消失。 在應用程序中創(chuàng)建和使用類的一般步驟為: 1) 在VB工程中添加一個類模塊。 2) 在類模塊代碼窗口中編寫代碼,聲明類的屬性和創(chuàng)建類的方法。 3) 在應用程序中使用Set語句將類實例化(生成一個對象)。 4) 在應用程序代碼中設置對象屬性、調(diào)用對象的方法

15、,從而通過類實現(xiàn)特定的功能。13.3.2 向類中添加屬性 在創(chuàng)建了類之后,可以使用聲明公共變量和使用屬性過程的方式定義其屬性。上例中使用的公共變量Name實際上就是類Class1的一個屬性。1. 使用公共變量添加屬性 創(chuàng)建類屬性最簡單的方法就是使用公共變量,只要在類模塊的聲明段聲明它們即可,其語法格式如下:Public 屬性名 As 類型 例如:Public Name As String 設置類的Name屬性為字符型。 使用公共變量定義屬性的缺點是無法對其有效性進行檢查。一旦建立了對象,公共變量對應用程序是可見的,程序的任意部分都可以改變變量的值。2. 使用屬性過程添加屬性 在類中建立屬性最安

16、全、最靈活的方法是使用屬性過程。屬性過程具有封裝功能,一般在應用于下列場合時應當使用屬性過程: 1) 屬性為只讀或一旦設置就不能更改的情況。 2) 屬性已設置的值需要合法性驗證。 3) 屬性的設置可導致一些對象狀態(tài)的改變或改變其他屬性及內(nèi)部變量值。 尤其屬性過程提供了建立只讀屬性的功能,這在使用公共變量時是不可能的。系統(tǒng)提供的3種可用的屬性過程,見表13-1。表13-1 可用的屬性過程過程名說明Property Get返回屬性的值,當用戶讀取屬性值時執(zhí)行Property Let設置屬性的值,當用戶寫入屬性值時執(zhí)行Property Set設置對象屬性的值,這是Property Let的一個特例,

17、當變量的類型為對象時使用【例13-2】創(chuàng)建一個Rectangle(矩形)類,并聲明Width(寬)和Height(高)兩個Public屬性。 1) 添加類模塊及屬性過程。添加一個類模塊,并在屬性窗口中將其“名稱”屬性設置為Rectangle。執(zhí)行“工具”菜單下“添加過程”命令,在圖13-6所示的對話框中選擇“屬性”,在對話框“名稱”欄中填入“Width”后單擊【確定】按鈕。Height屬性的框架可參照同樣的方法添加到類模塊中。圖13-6 添加屬性過程 圖13-7 類模塊代碼窗口中的屬性過程代碼 此時在類模塊的代碼窗口中將自動出現(xiàn)圖13-7所示的屬性過程代碼框架。屬性過程一般都是成對出現(xiàn)(具有相

18、同屬性名的Property Get過程和Property Let過程),表示該屬性可讀可寫。如果只有Property Get過程,則表示該屬性為只讀屬性,也就是說應用程序不能直接修改該屬性的值,若要更改必須通過類方法編程來實現(xiàn)。缺省情況下VB認為所有的屬性及參數(shù)均為Variant類型,可以在代碼窗口中進行修改,也可以不使用添加過程對話框而直接在代碼窗口中輸入。 2) 編寫屬性過程代碼。Private clsWidth As Integer 聲明類模塊內(nèi)部使用的私有變量,用于存放矩形的寬度Private clsHeight As Integer 聲明類模塊內(nèi)部使用的私有變量,用于存放矩形的高度P

19、ublic Property Get Width() As Integer 類的Width屬性讀取過程 Width = clsWidthEnd PropertyPublic Property Let Width(ByVal NewWidth As Integer) 類的Width屬性寫入過程 If NewWidth = 0 Then MsgBox 矩形的寬度不能小于或等于零!, vbOKOnly, 警告 Else clsWidth = NewWidth End IfEnd Property 2) 編寫屬性過程代碼。Public Property Get Height() As Integer

20、類的Height屬性讀取過程 Height = clsHeightEnd PropertyPublic Property Let Height(ByVal NewHeight As Integer) 類的Height屬性寫入過程 If NewHeight = 0 Then MsgBox 矩形的高度不能小于或等于零!, vbOKOnly, 警告 Else clsHeight = NewHeight End IfEnd Property13.3.3 向類中添加方法 類的方法定義了由類創(chuàng)建的全部對象的行為,每個對象可以隨后執(zhí)行這些行為。例如,PictureBox控件有Move方法,所以在窗體上的圖片

21、框可以調(diào)用該方法將對象移動到其他位置。對用戶來說,完全不必關心Move方法的編程是怎么實現(xiàn)的,只要按照該方法規(guī)定的語法格式直接調(diào)用接口來使用,這就是被封裝了的方法。 要為自定義類創(chuàng)建方法,需要在類模塊中添加公共過程。若該方法沒有返回值可以使用Public Sub子過程,否則就應當使用Public Function函數(shù)過程。在類模塊內(nèi)添加的Private Sub或Private Function過程,只能在模塊內(nèi)部調(diào)用,對類模塊的使用者來說是不可見的。在13.3.1介紹的例子中就是使用Public Sub子過程定義了類的reverseName方法。【例13-3】為【例13-2】添加一個用于返回矩

22、形面積的Area方法(圖13-8)。 雙擊例13-2中創(chuàng)建的*.vbp文件重新打開工程,進入類模塊編輯窗口,添加如下Public Function函數(shù)過程代碼。Public Function Area() As Integer 使用Function創(chuàng)建Area()方法 Area = clsWidth * clsHeight 方法的行為是返回寬*高(面積)值End Function 在類模塊中定義了類的屬性和方法后,若需要在應用程序中調(diào)用,可按圖13-9所示創(chuàng)建應用程序的界面,并編寫如下所示的代碼。圖13-8 返回矩形面積 【計算】按鈕被單擊時執(zhí)行的事件代碼如下:Private Sub Comm

23、and1_Click() Dim myobj 聲明變量用于存放對象 Set myobj = New Rectangle 為對象變量賦值(Rectangle類的實例化) If Text1.Text = Or Text2.Text = Then MsgBox 必須輸入寬和高的值!, 48, 警告 如果用戶沒有輸入寬和高,顯示警告信息框 Else myobj.Width = Val(Text1.Text) 為對象的Width屬性賦值 myobj.Height = Val(Text2.Text) 為對象的Height屬性賦值 ption = 矩形的面積為: & myobj.Area 調(diào)用對象的

24、Area方法 Label3.Left = (Me.Width - Label3.Width) / 2 將計算結(jié)果顯示到窗體中央 End IfEnd Sub 【清除】按鈕被單擊時執(zhí)行的事件代碼如下:Private Sub Command2_Click() Text1.Text = Text2.Text = Text1.SetFocus 使Text1得到焦點,以方便用戶下一次的輸入 ption = End Sub13.3.4 響應默認事件和自定義事件 屬性和方法屬于“入端接口”,它是從對象外面被調(diào)用的。但是事件卻在對象的內(nèi)部產(chǎn)生,在其他地方進行處理,故被稱為“出端接口”。 類支持的事件分為“默認事

25、件”和“自定義事件”兩種。默認事件是指類創(chuàng)建后由系統(tǒng)自動提供的事件。而自定義事件是指類創(chuàng)建后由用戶根據(jù)具體的需要在類模塊中定義的事件。1. 響應默認事件 由系統(tǒng)創(chuàng)建的類模塊默認事件有兩個:Initialize(初始化)和Terminate。(結(jié)束)前者在對象建立時被激發(fā),領先于其他任何設置屬性或執(zhí)行方法的動作,后者則是在對象結(jié)束時激發(fā)。通常Initialize事件被應用與類屬性的初始化,Terminate事件則往往用來處理類模塊的結(jié)尾工作。 可以在類模塊代碼窗口中左邊對象列表中選擇“Class”,右邊事件列表中選擇對應的事件,選擇后系統(tǒng)會自動創(chuàng)建該事件的代碼框架。 在類Rectangle中可利

26、用Initialize事件過程對矩形的寬和高進行初始化,指定默認的矩形寬為10,高為6,事件過程代碼如下:Public Sub Class_Initialize() clsWidth = 10 clsHeight = 6End Sub 當由類產(chǎn)生一個對象時,此對象首先要自動執(zhí)行Initialize事件,使得Rectangle類中對應的屬性得到初始值。2. 自定義事件 前面介紹了向類中添加屬性和方法的操作,通過屬性和方法,可以與對象進行交互。但是這種交互是單方面的,對象只能被動地改變屬性值或被調(diào)用方法。通過向類中添加自定義事件可以使對象具有與應用程序進行交互的能力。 事件與屬性、方法最大的區(qū)別在

27、于屬性和方法對應的代碼是類模塊的設計者預先設計好的,類模塊的使用者調(diào)用什么方法,系統(tǒng)就自動調(diào)用相應的代碼。而對于事件,類模塊的設計者只能決定何時激發(fā)事件,對于事件本身應該執(zhí)行一些什么操作是有類模塊的使用者來決定的。可以看出對象的屬性和方法的具體實現(xiàn)步驟均被封裝在對象的內(nèi)部,只有事件可以被發(fā)送到對象的外部。對象可以產(chǎn)生不同的事件,應用程序根據(jù)不同的事件做出不同的響應。 在類模塊中添加自定義事件需要完成以下兩項工作: 1) 在類模塊的聲明段使用Event語句聲明類中的公共事件。 2) 在類模塊代碼的適當位置使用RaiseEvent語句激發(fā)該事件?!纠?3-4】在前面創(chuàng)建的Rectangle類中添加

28、一個Warning事件,當計算出來的矩形面積小于等于6或大于等于100時觸發(fā)該事件。要求在應用程序中編寫事件處理代碼,顯示一個信息框提醒用戶注意。 程序運行結(jié)果如圖13-10所示。圖13-10 觸發(fā)自定義事件 設計步驟如下: 在Rectangle類代碼窗口中所有過程之外使用Event語句聲明Warning事件。Public Event Warning() 在Rectangle類的Area方法過程中添加下列代碼(請注意帶有下劃線的部分):Public Event Warning() 聲明類中包含的事件Public Function Area() As Integer 使用Function創(chuàng)建Ar

29、ea()函數(shù)方法 Area = clsWidth * clsHeight 方法的行為是返回寬高(面積)值 矩形面積過小或過大時觸發(fā)Warning事件 If Area = 100 Then RaiseEvent WarningEnd Function 修改應用程序代碼如下: 由于Rectangle類的實例myobj需要在多個過程中使用,故需要在“通用”段進行聲明,并將聲明語句改為:Dim WithEvents myobj As Rectangle 使用WithEvents關鍵字,表示可以使用對象的事件 編寫myobj對象的Warning事件代碼如下:Private Sub myobj_Warni

30、ng() MsgBox 矩形的面積太小或過大!, 48, 警告End Sub 編寫時可在代碼窗口左側(cè)下拉列表框中選擇對象myobj,在右側(cè)下拉列表框中自動會出現(xiàn)Warning事件名稱,且系統(tǒng)會自動創(chuàng)建事件過程的框架。v13.4 ActiveX控件 ActiveX控件,是擴展名為.ocx的獨立文件,是VB工具箱的擴充部分。它保留了一些用戶熟悉的屬性、事件和方法,它們的作用和以前完全相同。這樣就保證了程序員的基本能力。而且,ActiveX控件特有的方法和屬性大大地增強了程序員的能力和靈活性。例如,VB專業(yè)版和企業(yè)版包括了Windows公共控件,用來創(chuàng)建具有Windows面貌和風格的工具欄、狀態(tài)條以

31、及目錄結(jié)構(gòu)樹的應用程序。另外一些控件可用來創(chuàng)建利用Internet功能的應用程序。13.4.1 ActiveX控件概述 ActiveX控件加入工具箱后,既成為開發(fā)和運行環(huán)境的一部分,并為應用程序提供了新的功能。ActiveX控件包括各種版本VB提供的控件(如CommonDialog控件等)和僅在專業(yè)版和企業(yè)版中提供的控件(如,Listview、Toolbar和Animation),另外還有許多由第三方提供和用戶自己開發(fā)的ActiveX控件。需要注意的是,擴展名為.vbx的控件使用了老的技術,用VB早期版本編寫的應用程序中可能會找到這些控件。當VB打開包含.vbx控件的工程時,在缺省情況下會用.

32、ocx控件取代它,當然,這只有在這些控件的.ocx版本存在時才可以。13.4.2 添加刪除ActiveX控件 ActiveX控件在使用前需要執(zhí)行“工程”菜單下的“部件”命令,在打開的“部件”對話框中選擇“控件”標簽,然后選擇需要加入工具箱中的ActiveX控件名,單擊“確定”即可將控件加入到工具箱中,如圖13-11所示。該操作將“公用對話框”(CommonDialog)控件添加到了工具箱中,如圖13-12所示。此后就可以向使用其它標準控件一樣使用“公用對話框”控件了。 單擊部件對話框中的【瀏覽】按鈕,可以通過打開的“添加ActiveX控件”對話框,在計算機中查找并打開需要使用的.ocx文件,將

33、選中的控件加入工具箱。 注意,有時一個.ocx文件內(nèi)可能包含有多個ActiveX控件,如“Microsoft Windows Common Controls 6.0”,對應的C:WindowsSystemMscomct.ocx文件中就包含了工具欄(ToolBar)、狀態(tài)欄(StatusBar)、進度條(ProgressBar)等9個控件。 若要從工具箱中刪除AcitveX控件只需在“部件”對話框中清除要刪除控件旁邊的復選框,再單擊【確定】按鈕即可,但不能刪除工程中正在使用的控件。13.4.3 創(chuàng)建ActiveX控件 VB允許用戶自己開發(fā)需要的控件,并將其編譯成.ocx文件以便在任何工程中方便地

34、調(diào)用。創(chuàng)建簡單ActiveX控件的一般過程如下: 1) 建立一個新的ActiveX控件工程。 2) 像設計一般程序一樣“畫出”控件的界面。 3) 編寫實現(xiàn)控件行為的代碼。 4) 編寫實現(xiàn)控件特有屬性、方法和事件的代碼。 5) 檢測并保存控件的所有文件。 6) 將控件編譯成.ocx文件。 下面通過兩個簡單的例子說明開發(fā)ActiveX控件的一般方法?!纠?3-5】設計一個能計算三角函數(shù)的控件。 1) 新建一個ActiveX控件工程。啟動VB或執(zhí)行“文件”菜單中的“新建工程”命令打開“新建工程”對話框,選擇“ActiveX控件”如圖13-13所示,單擊【打開】按鈕。 此時VB將自動建立了一個空的,名

35、為UserControl1的用戶控件窗口如圖13-14所示,此窗口與標準EXE工程窗口非常相似只是沒有標題欄和立體的邊框。圖13-13 選擇ActiveX控件選項 圖13-14 用戶自定義控件窗體 2) 添加需要的標準控件。如圖13-15所示,添加兩個標簽Label1、Label2,兩個文本框Text1、Text2,兩個命令按鈕Command1、Command2,由四個單選按鈕Option1(0)Option1(3)組成的單選按鈕組,并更改相應的屬性值,注意將控件的Name屬性改為一個容易記憶的名稱,該屬性值將顯示在添加到工具箱中的ActiveX控件的工具提示中。圖13-15 自定義三角函數(shù)計

36、算控件界面 3) 編寫程序代碼。Dim numf As Integer 在聲明段中定義變量用于存放單選按鈕被選中的序號Private Sub Command1_Click() 單擊【確定】按鈕時執(zhí)行的代碼 If Text1 = Or Val(Text1) 360 Then MsgBox 請輸入角度值!, 48, 注意 用戶輸入數(shù)據(jù)有誤時彈出信息框提示,并退出過程 Exit Sub End If Select Case numf Case 0 Text2 = Format(Sin(Val(Text1) * 3.1415926 / 180), #0.0000) Case 1 Text2 = For

37、mat(Cos(Val(Text1) * 3.1415926 / 180), #0.0000) Case 2 If Text1 = 90 Or Text1 = 270 Then Text2 = 函數(shù)值不存在 Else Text2 = Format(Tan(Val(Text1) * 3.1415926 / 180), #0.0000) End If Case 3 If Text1 = 0 Or Text1 = 180 Or Text1 = 360 Then Text2 = 函數(shù)值不存在 Else Text2 = Format(1 / (Tan(Val(Text1) * 3.1415926 / 1

38、80), #0.0000) End If End Select Text1.SetFocusEnd Sub 單擊【取消】按鈕時執(zhí)行的代碼Private Sub Command2_Click() Text1 = Text2 = Text1.SetFocus Option1(0).Value = TrueEnd Sub 單擊單選按鈕時執(zhí)行的代碼Private Sub Option1_Click(Index As Integer) Label1 = Option1(Index).Caption numf = IndexEnd Sub 編寫代碼的方法及規(guī)則與標準EXE工程中完全相同。 4) 按F5鍵在

39、IE瀏覽器中運行程序,并檢測控件的各項功能,如圖13-16所示。 5) 執(zhí)行“工程”菜單中的“工程1屬性”命令,設置控件的名稱為“trigonometric”,描述內(nèi)容為“三角函數(shù)計算器”,如圖13-17所示,描述內(nèi)容將顯示在“部件”對話框的控件描述中,然后單擊【確定】按鈕。執(zhí)行“保存工程”命令,將所有的控件文件存盤,執(zhí)行“文件”菜單中的“生成xxx.ocx文件”命令,對控件進行編譯。圖13-16 在IE瀏覽器中測試自定義控件 圖13-17 設置自定義控件工程屬性 6) 新建一個標準EXE工程,向工具箱中添加“三角函數(shù)計算器”控件,并將其加入窗體。這樣不必編寫任何代碼即可得到一個具有三角函數(shù)計

40、算功能的應用程序。 由于本例較為簡單,不存在自定義的屬性、事件及方法。【例13-6】利用向?qū)Ы⒁粋€具有自定義屬性的ActiveX控件,該控件可以在窗體上顯示一道“4選1”的題目,用戶能夠利用單選按鈕選擇正確答案。要求為該控件新建以下設計時可用屬性:Question用于存放題目,QuestionA、QuestionB、QuestionC、QuestionD用于存放四個供選答案。新建以下設計時不可用屬性,Answer用于存放正確答案,UserAnswer用于存放用戶選擇的答案。 1) 參照前例所示的方法,通過新建工程對話框新建一個ActiveX控件,并向其中添加五個標簽和四個單選按鈕組成的單選按

41、鈕組。將其Name屬性分別設為lblQuestion、lblQuestionA、lblQuestionB、lblQuestionC、lblQuestionD、optAnswer(0)、optAnswer(1)、optAnswer(2)、optAnswer(3)。按圖13-18所示設置各控件的Caption屬性。圖13-18 設置個控件的Capton屬性 圖13-19 添加用戶控件對話框 2) 執(zhí)行“工程”菜單中的“添加用戶控件”命令,打開圖13-19所示的“添加用戶控件”對話框,選擇其中“VB ActiveX控件界面向?qū)А焙髥螕簟敬蜷_】按鈕,將出現(xiàn)ActiveX控件接口向?qū)Ы榻B,單擊【下一步】按鈕打開圖13-20所示的“選定接口成員”對話框。圖13-20 選定可用成員及創(chuàng)建自定義成員 在該

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論