第六章表單設(shè)計(jì)與應(yīng)用_第1頁(yè)
第六章表單設(shè)計(jì)與應(yīng)用_第2頁(yè)
第六章表單設(shè)計(jì)與應(yīng)用_第3頁(yè)
第六章表單設(shè)計(jì)與應(yīng)用_第4頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第六章 表單設(shè)計(jì)與應(yīng)用表單(Form)可以把它理解為應(yīng)用程序的界面.示范.表單的英文是Form從現(xiàn)在起,請(qǐng)大家注意本章中提到的每一個(gè)概念的英文名字并記住它.創(chuàng)建表單的方法和前面創(chuàng)建其他東西的方法類似,有以下幾種方法:(1) 文件à新建à表單(2) 項(xiàng)目管理器中,展開(kāi)到文檔,選表單,新建(3) 命令方式:CREATE FORM不管用哪種方法,都將打開(kāi)表單設(shè)計(jì)器窗口.同時(shí)激活的還有表單控件工具欄和屬性工具欄.演示放一個(gè)按鈕,并將按鈕的標(biāo)題改成”確定”.運(yùn)行后看效果.如果要深入地學(xué)習(xí)怎么樣設(shè)計(jì)表單,有必要在講表單設(shè)計(jì)之前闡述幾個(gè)概念6.1面向?qū)ο蟮母拍罹幊绦蛴袃煞N方法:一種稱為面

2、向過(guò)程的方法,一種稱為面向?qū)ο蟮姆椒?所謂面向過(guò)程的方法,就是傳統(tǒng)的,手工輸入命令,從程序的第一行起一直寫到程序的最后一行.這種方法效率低,代碼不具有可重用性.所謂面向?qū)ο蟮木幊谭椒?就是我們面向的不再是一行行的程序語(yǔ)言,而是面對(duì)著一個(gè)一個(gè)的具體對(duì)象,對(duì)這些具體對(duì)象進(jìn)行編程就可以了.什么叫對(duì)象?對(duì)象就是一個(gè)個(gè)具體的東西,例如一個(gè)按鈕,一個(gè)對(duì)話框,一個(gè)表單,這些都可以看成是一個(gè)對(duì)象.我們只需要面向這些按鈕,表單等等對(duì)象來(lái)編寫程序就行了.面向?qū)ο蟮木幊谭椒ㄓ悬c(diǎn)類似與組合家具的拼裝.設(shè)想,假如我們要打一個(gè)柜子,要求有五個(gè)抽屜,一個(gè)柜門,面向過(guò)程的方法就是上山去采木,然后干燥木頭,量線距木,刨子刨木頭

3、打成一塊塊的板材,依此做成框架和五個(gè)抽屜等等.而面向?qū)ο蟮姆椒▌t是現(xiàn)在已經(jīng)有了現(xiàn)成的抽屜,框架和柜門,我們只要把它們拿過(guò)來(lái)拼裝一下就行了.面向?qū)ο蟮姆椒ㄒ彩沁@樣,假如我們要編寫一個(gè)程序界面,這個(gè)界面有兩個(gè)按鈕,一張表格,如果系統(tǒng)已經(jīng)給我們提供好了按鈕和表格的半成品(就象抽屜,抽屜這個(gè)半成品我已經(jīng)做好了,直接拿來(lái)改一改就行),一樣的,我們只要把系統(tǒng)提供給我們的這個(gè)按鈕和表格直接拿來(lái)稍做修改就完成了,根本不需要為怎么樣生成這個(gè)按鈕而傷腦筋去寫程序.這就是面向?qū)ο蟮木幊谭椒?有了面向?qū)ο蟮募夹g(shù),我們只需要去關(guān)心如何組合和調(diào)試系統(tǒng)給我們提供的配件就行了.6.1.1對(duì)象與類的概念(1)對(duì)象: 對(duì)象的含義

4、實(shí)際上有廣義和狹義兩種理解。廣義上說(shuō),對(duì)象就是一個(gè)實(shí)體,例如現(xiàn)實(shí)生活中的一張桌子、一張椅子,都可以看成一個(gè)對(duì)象;狹義上來(lái)說(shuō),只局限在程序設(shè)計(jì)的范疇內(nèi),那么程序中的一個(gè)按鈕,一個(gè)表單等等,都叫做對(duì)象。(2)類:類的概念用不著把它理解得太抽象,就從字面上來(lái)理解就行了.就是指一個(gè)劃分.例如,所有的動(dòng)物都是動(dòng)物類,所有的貓都是貓類.在座的都是人類.在計(jì)算機(jī)中,所有的按鈕都屬于按鈕類,所有的表單都屬于表單類,等等.書中還提到了子類與繼承的問(wèn)題.這個(gè)問(wèn)題也可以形象化地來(lái)理解.如貓類,它就是動(dòng)物類的子類.所謂繼承,是指子類可以自動(dòng)父類的一些特點(diǎn).如貓類,它是動(dòng)物類的子類,那么動(dòng)物類的一些特點(diǎn),貓都可以自動(dòng)擁

5、有,這個(gè)就叫繼承VFP中的對(duì)象可以分為兩大基類,即容器類和控件類。與此對(duì)應(yīng),VFP對(duì)象也分為容器對(duì)象和控件對(duì)象。分別介紹如下:(1) 容器類對(duì)象容器類可以包含其他對(duì)象,并且允許訪問(wèn)這些對(duì)象。例如表單,它本身就是一個(gè)大的容器類,它里面可以放置按鈕、文本框等等。又比如一個(gè)命令按鈕組,它里面可以容放很多命令按鈕,所以它也是一個(gè)容器類對(duì)象。容器類及其能包含的對(duì)象如表6-1所示:表6-1 容器類對(duì)象對(duì)象名稱語(yǔ)法名稱工具欄圖標(biāo) 能包含的對(duì)象表單集Formset表單,工具欄表單Form頁(yè)框, 任意控件,容器,或自定義對(duì)象命令按鈕組CommandGroup命令按鈕選項(xiàng)按鈕組OptionGroup選項(xiàng)按鈕容器C

6、ontainer任意控件頁(yè)框PageFrame頁(yè)面頁(yè)面Page任意控件,容器和自定義對(duì)象表格Grid表格列工具欄ToolBar任意控件,頁(yè)框和容器(2) 控件類對(duì)象控件類對(duì)象通常是指一個(gè)可以以圖形化的方式顯示出來(lái)并能與用戶進(jìn)行交互的對(duì)象。區(qū)別于容器類對(duì)象,它其中不能再包含別的對(duì)象。表6-2列出了常用的控件類對(duì)象。表6-2 控件類對(duì)象對(duì)象名稱語(yǔ)法名稱工具欄圖標(biāo) 說(shuō) 明文本框Text用于編輯字段或變量的內(nèi)容復(fù)選框Check用于邏輯型數(shù)據(jù)選擇輸入組合框Combo打開(kāi)一個(gè)列表供選擇(不可多選)命令按鈕Command用于啟動(dòng)一個(gè)事件,完成某項(xiàng)任務(wù)標(biāo)簽Lable用于顯示要說(shuō)明的文字編輯框Edit用于字符型

7、變量和備注型字段的編輯超級(jí)鏈接HyperLink可以使活動(dòng)文件轉(zhuǎn)入U(xiǎn)RL圖像Image顯示.bmp圖片線條Line用于顯示水平或豎直或?qū)蔷€的圖形列表框List顯示一列數(shù)據(jù)供選擇(可多選)定時(shí)器Timer用于后臺(tái)計(jì)時(shí)控制形狀Shape用于顯示矩形到圓的圖形控制微調(diào)Spinner可通過(guò)單擊上下箭頭微調(diào)框內(nèi)的數(shù)值當(dāng)要在表單中添加這些對(duì)象時(shí),只需要單擊“控件工具欄”中的相應(yīng)圖標(biāo)按鈕,然后在表單的適當(dāng)位置再次單擊即可。被安放的對(duì)象將會(huì)以其語(yǔ)法名稱后跟序號(hào)來(lái)默認(rèn)命名,如Text1,Text2等等。當(dāng)在程序中引用它們時(shí),只需指出其名稱(如Text1,Text2)即可。6.1.2 對(duì)象的屬性 對(duì)象的屬性描述

8、事物的特性和狀態(tài)。比方說(shuō),描述學(xué)生的姓名、性別、出生日期等,這些都是學(xué)生這個(gè)對(duì)象的屬性。又例如,表單中的一個(gè)按鈕,它就是一個(gè)對(duì)象,那么對(duì)于按鈕這個(gè)對(duì)象來(lái)說(shuō),它又有如下的一些屬性: Caption: 該屬性指的是這個(gè)按鈕的標(biāo)題名。 Enabled: 該按鈕是否可用。 ForeColor: 這個(gè)按鈕的前景顏色。 Visible: 這個(gè)按鈕是否可見(jiàn)。例:改變caption屬性的值,使之成為”O(jiān)K”,則按鈕的標(biāo)題變?yōu)椤監(jiān)K” 改變visible屬性值使之成為.f.,則按鈕不可見(jiàn).6.1.3 對(duì)象的事件和方法每個(gè)對(duì)象都可以對(duì)一個(gè)被稱為事件的動(dòng)作進(jìn)行識(shí)別和響應(yīng)。事件是一種預(yù)先定義好的特定的動(dòng)作,由用戶或系

9、統(tǒng)激活。在多種情況下,事件是通過(guò)用戶的交互操作產(chǎn)生的。例如,對(duì)一部電話來(lái)說(shuō),電話是一個(gè)對(duì)象,那么我們拿起電話聽(tīng)筒的時(shí)候,拿電話的這個(gè)動(dòng)作就激發(fā)了一個(gè)事件(接聽(tīng)電話的事件)。在VFP中,可以激發(fā)事件的用戶動(dòng)作主要包括:鼠標(biāo)的點(diǎn)擊、鼠標(biāo)的移動(dòng)、鍵盤的按下等等,都可以觸發(fā)一個(gè)事件。例如鼠標(biāo)的點(diǎn)擊,它就是一個(gè)click事件。方法是規(guī)定對(duì)象如何實(shí)現(xiàn)其行為的程序或過(guò)程。它是一個(gè)程序,這個(gè)程序可以是相對(duì)于某個(gè)事件而編寫的, 比方說(shuō)對(duì)于一個(gè)click事件,我們可以為它編制一個(gè)方法,一旦click事件發(fā)生,系統(tǒng)就會(huì)調(diào)用這個(gè)方法來(lái)完成相應(yīng)的程序動(dòng)作。這是相對(duì)于某個(gè)事件的方法,但是方法本身也可以獨(dú)立于事件之外,與任

10、何事件都不發(fā)生聯(lián)系。事件集合雖然范圍很廣,但卻是固定的,用戶不能創(chuàng)建新的事件。然而方法程序集合卻可以無(wú)限擴(kuò)展。VFP中常用的事件和方法有:(1) Init事件在對(duì)象建立時(shí)引發(fā)。在表單對(duì)象的Init事件引發(fā)之前,將先引發(fā)它所包含的控件對(duì)象的Init事件,所以在表單對(duì)象的Init事件代碼中能夠訪問(wèn)它所包含的所有控件對(duì)象。(2) Destroy事件在對(duì)象釋放時(shí)引發(fā)。表單對(duì)象的Destroy事件在它所包含的控件對(duì)象的Destroy事件引發(fā)之前引發(fā),所以在表單對(duì)象的Destroy事件代碼中能夠訪問(wèn)它所包含的所有控件對(duì)象。(3) Error事件當(dāng)對(duì)象方法或事件代碼在運(yùn)行過(guò)程中產(chǎn)生錯(cuò)誤時(shí)引發(fā)。事件引發(fā)時(shí),系

11、統(tǒng)會(huì)把發(fā)生的錯(cuò)誤類型和錯(cuò)誤發(fā)生的位置等參數(shù)傳遞給事件代碼,事件代碼可以據(jù)此對(duì)錯(cuò)誤進(jìn)行相應(yīng)的處理(4) Load事件在表單對(duì)象建立之前引發(fā),即運(yùn)行表單時(shí),先引發(fā)表單的Load事件,再引發(fā)表單的Init事件。(5) Unload事件在表單對(duì)象釋放時(shí)引發(fā),是表單對(duì)象釋放時(shí)最后一個(gè)要引發(fā)的事件。比如在關(guān)閉包含一個(gè)命令按鈕的表單時(shí),先引發(fā)表單的Destroy事件,然后引發(fā)命令按鈕的Destroy事件,最后引發(fā)表單的Unload事件。(6) Click事件用鼠標(biāo)單擊對(duì)象時(shí)引發(fā)。(7) DbClick事件用鼠標(biāo)雙擊對(duì)象時(shí)引發(fā)。(8) RightClick事件用鼠標(biāo)右擊對(duì)象時(shí)引發(fā)。(9) Interactiv

12、eChange事件當(dāng)用鼠標(biāo)或鍵盤通過(guò)交互式改變一個(gè)控件的值時(shí)引發(fā)。(10) Release方法將表單從內(nèi)存中釋放(清除)。比如表單有一個(gè)命令按鈕,如果希望單擊該命令按鈕時(shí)關(guān)閉表單,就可以將該命令按鈕的Click事件代碼設(shè)置為: ThisForm.Release(11) Refresh方法重新刷新表單或控件及它的所有值。當(dāng)表單被刷新時(shí),表單上的所有控件也都被刷新。當(dāng)頁(yè)框被刷新時(shí),只有活動(dòng)頁(yè)被刷新。(12) Show方法顯示表單。該方法將表單的Visible屬性設(shè)置為.T.,并使表單成為活動(dòng)對(duì)象。(13) Hide方法隱藏表單。該方法將表單的Visible屬性設(shè)置為.F.。(14) SetFocu

13、s方法此控件獲得焦點(diǎn),使其成為活動(dòng)對(duì)象。如果一個(gè)控件的Enambled屬性值或Visible屬性值為.F.,將不能獲得焦點(diǎn)。6.1.4 對(duì)象(類)的特性對(duì)象之間是有差別的,但是它們之間存在著一些共性,即繼承性、多態(tài)性和封裝性。這也是類所具有的特性,因此在這里一并講述。(1) 繼承性:指如果一個(gè)對(duì)象是在另一個(gè)對(duì)象的基礎(chǔ)上產(chǎn)生的,那么這個(gè)對(duì)象自動(dòng)擁有原來(lái)對(duì)象的全部特征(當(dāng)然也可以為它再加上一些新的特征)。這種繼承的特性可以極大地簡(jiǎn)化數(shù)據(jù)庫(kù)系統(tǒng)的代碼編制的復(fù)雜程度。(2) 多態(tài)性:指不同的對(duì)象可能具有相同的屬性、方法和事件類型。例如,相關(guān)聯(lián)的幾個(gè)對(duì)象可以同時(shí)包含Refresh方法和Click事件,盡

14、管具體的屬性值、方法代碼可能有所不同。也就是說(shuō),當(dāng)某個(gè)過(guò)程將其中一個(gè)對(duì)象作為參數(shù)傳遞時(shí),它不必知道參數(shù)是何種類型的對(duì)象,只需要調(diào)用Refresh方法即可。這一特性提高了應(yīng)用系統(tǒng)開(kāi)發(fā)的獨(dú)立性。(3) 封裝性:指對(duì)象的屬性、方法和事件代碼都存入對(duì)象中,對(duì)象調(diào)用的一般用戶不需要了解該對(duì)象的屬性,方法和事件代碼,只需要知道這個(gè)對(duì)象具有哪些屬性、事件和方法,如何使用這些屬性、事件、方法即可。例如,對(duì)一個(gè)按扭,我們只需要知道它有click這個(gè)事件、有caption這個(gè)屬性,至于它的這些事件、屬性是如何被計(jì)算機(jī)所捕獲的,我們并不需要知道。這就是它的封裝性。6.1.5 容器中對(duì)象及層次的引用在VFP中,當(dāng)我們

15、使用了容器對(duì)象后,就會(huì)產(chǎn)生對(duì)象的嵌套層次關(guān)系。當(dāng)我們引用嵌套層次關(guān)系中的對(duì)象的時(shí)候,往往需要指明對(duì)象在嵌套層次中的位置,這時(shí),我們就需要用到如下的幾個(gè)屬性或關(guān)鍵字: This: 當(dāng)前對(duì)象。光標(biāo)落在什么上面,或者當(dāng)前正在對(duì)什么編程? Parent: 當(dāng)前對(duì)象的直接容器對(duì)象,即父對(duì)象。 ThisForm: 當(dāng)前對(duì)象所處的表單。 ThisFormSet: 當(dāng)前對(duì)象所處的表單集。其中,Parent是屬性,其他三個(gè)是關(guān)鍵字。他們?cè)趯?duì)象嵌套的層次關(guān)系中分別指明不同的引用對(duì)象。例如:This.Caption=“OK” *當(dāng)前對(duì)象的標(biāo)題設(shè)為“OK”。This.Parent.BackColor=RGB(1920

16、0) *設(shè)置當(dāng)前控件所在的表單的前景色為暗紅色。例:表單中有一個(gè)按鈕command1和一個(gè)頁(yè)框pageframe1,頁(yè)框中包含兩個(gè)頁(yè)面page1和page2,其中分別包含一個(gè)文本框text1和一個(gè)按鈕command1.注意這里有兩個(gè)command1(1)假設(shè)當(dāng)前對(duì)象為command1(正在對(duì)command1編程),要引用page1里的text1:Thisform.pageframe1.page1.text1.value=OKThis.parent.pageframe1.page1.text1.value=”O(jiān)K”(2)假設(shè)當(dāng)前對(duì)象為page2中的command1,要引用page1中的text1

17、:Thisform.pageframe1.page1.text1.value=OKThis.parent.parent.page1.text1.value=OK6.1.6 對(duì)象的屬性,方法及事件的調(diào)用(1) 對(duì)象的屬性設(shè)置及引用方法設(shè)置對(duì)象的單個(gè)屬性 既可以在運(yùn)行時(shí)也可以在設(shè)計(jì)時(shí)為它進(jìn)行屬性設(shè)置。語(yǔ)法是: <對(duì)象>.<屬性>=<屬性值>例如,設(shè)置button1的標(biāo)題屬性為“退出”:button1.caption=“退出”設(shè)置對(duì)象的多個(gè)屬性 當(dāng)需要對(duì)某個(gè)對(duì)象的多個(gè)屬性進(jìn)行設(shè)置時(shí),可以使用WITHENDWITH結(jié)構(gòu)簡(jiǎn)化設(shè)置的過(guò)程。例如,在表單form1中,要設(shè)置

18、表格grid1的列的多個(gè)屬性,可以使用以下語(yǔ)法結(jié)構(gòu):WITH Form1. Grid1. Column1.width=5.Resizable=.F.ForColor=RGB(0,0,0).BackColor=RGB(255,255,255).SelectOnEntry=.T.ENDWITH(2) 調(diào)用方法程序如果對(duì)象已經(jīng)創(chuàng)建,便可以在應(yīng)用程序中的任何一個(gè)地方調(diào)用這個(gè)對(duì)象的方法程序。語(yǔ)法是:<對(duì)象>.<方法>例如,下列語(yǔ)句調(diào)用方法程序來(lái)顯示表單,并將光標(biāo)的焦點(diǎn)設(shè)置在文本框上:frsFormSet.frmForm1.showfrsFormSet.frmForm1.txtGe

19、tText1.setFocus在表達(dá)式中,有返回值的方法程序必須以圓括號(hào)結(jié)尾。例如,下列語(yǔ)句將用戶自定義的GetNewCaption方法程序的返回值設(shè)置成表單的標(biāo)題:Form1.Caption=Form1.GetNewCaption( )傳遞方法程序的參數(shù)必須放在方法程序名后面的圓括號(hào)中,例如,F(xiàn)orm1.show(nStyle)即將nStyle傳遞給Form1的show方法程序代碼。6.2 Visual Foxpro 6.0的編程工具與步驟6.2.1 表單設(shè)計(jì)器表單設(shè)計(jì)器的啟動(dòng)方法和控件擺放的方法前面已經(jīng)介紹過(guò)。以下重點(diǎn)介紹它的其他一些附加窗口和工具欄。 1. 屬性窗口(如圖6-4所示)(1

20、) 對(duì)象下拉列表框該框標(biāo)識(shí)當(dāng)前選定的對(duì)象。單擊右端的向下箭頭,可看到包含當(dāng)前表單、表單集和全部控件的層次列表,我們可以從列表中選擇要更改其屬性的表單或控件。注意,其中對(duì)象的擺放是按層次規(guī)則的,因此我們可以從中清楚地看到對(duì)象之間的包含關(guān)系。(2) 選項(xiàng)卡選項(xiàng)卡可按分類顯示屬性、事件和方法程序。 全部: 顯示全部屬性,事件和方法程序。 數(shù)據(jù): 顯示有關(guān)對(duì)象數(shù)據(jù)特征和屬性。 方法程序: 顯示方法程序和事件。 布局: 顯示所有的布局屬性。 其他: 顯示其他和用戶自定義的屬性。由于對(duì)象的屬性和方法在這里被歸類顯示(并按首字母排序),因此可以幫助我們?cè)谠O(shè)置相關(guān)屬性時(shí)快速查找。例如,要設(shè)置按鈕的Captio

21、n屬性,由于是和布局有關(guān)的,所以切換到布局選項(xiàng)卡,并按字母序就可以快速找到;又如要看到此按鈕所有相關(guān)的方法程序,只需切換到方法程序選項(xiàng)卡,尋找其中是“用戶自定義過(guò)程”的項(xiàng)即可。屬性的設(shè)置方法是直接在屬性設(shè)置框中鍵入值;而方法程序的查看和編輯方法是先選定該控件要設(shè)置的事件或方法,然后用鼠標(biāo)雙擊,在彈出的事件方法代碼框中修改和編輯,完成后直接關(guān)閉該代碼窗口。2. 表單設(shè)計(jì)器工具欄(如書上圖6.8所示)其中的按鈕依次為: 設(shè)置TAB鍵次序:顯示當(dāng)按下Tab鍵時(shí),焦點(diǎn)從一個(gè)對(duì)象移向另一個(gè)對(duì)象的跳轉(zhuǎn)次序。(設(shè)置方法參書P184) 數(shù)據(jù)環(huán)境:顯示該表單運(yùn)行時(shí)所需要的數(shù)據(jù)環(huán)境。(下面介紹) 屬性窗口:顯示或

22、隱藏所選對(duì)象的屬性窗口。 代碼窗口:顯示或隱藏所選對(duì)象的代碼窗口,用戶可以在其中查看和編輯對(duì)象的事件代碼。 表單控件工具欄:顯示或隱藏“表單控件”工具欄。 調(diào)色板工具欄:顯示或隱藏“調(diào)色板”工具欄。 布局工具欄:顯示或隱藏“布局”工具欄。 表單生成器:?jiǎn)?dòng)表單生成器,快速生成表單。 自動(dòng)格式:?jiǎn)?dòng)“自動(dòng)格式生成器”對(duì)話框,為所選表單提供顯示風(fēng)格。至少選一個(gè)控件才能激活此按鈕。6.4.3 數(shù)據(jù)環(huán)境每一表單或表單集都包含一個(gè)數(shù)據(jù)環(huán)境。數(shù)據(jù)環(huán)境是一個(gè)對(duì)象,它包含與表單相互作用的表或視圖,以及表單所要求的表之間的關(guān)系。用戶可以使用“數(shù)據(jù)環(huán)境設(shè)計(jì)器”直觀地、可視化地設(shè)置表單數(shù)據(jù)環(huán)境,并與表單一起保存在表

23、單文件中。1.打開(kāi)數(shù)據(jù)環(huán)境設(shè)計(jì)器方法一:“顯示”à”數(shù)據(jù)環(huán)境”方法二:在表單空白處(不放控件的地方)右擊,彈出數(shù)據(jù)環(huán)境設(shè)計(jì)器2.向數(shù)據(jù)環(huán)境添加表或視圖3.從數(shù)據(jù)環(huán)境移去表或視圖在環(huán)境中單擊選中要移去的表或視圖后,按右邊的”移去”按鈕.6.2.3 用表單生成器創(chuàng)建快速表單在利用表單設(shè)計(jì)器創(chuàng)建表單時(shí),一旦表單設(shè)計(jì)器被激活時(shí),在VFP系統(tǒng)主菜單上會(huì)增加一個(gè)“表單”的菜單,我們可以選擇其中的“快速表單”命令來(lái)生成一個(gè)簡(jiǎn)單的快速表單,如圖所示。圖 表單生成器選擇需要的數(shù)據(jù)庫(kù)和表,將表中所有字段添加到“選定字段”框中,然后選“樣式”選項(xiàng)卡,在“樣式”中選擇一種樣式。單擊“確定”按鈕,即可生成快速

24、表單。執(zhí)行表單時(shí)系統(tǒng)會(huì)提示保存表單。用表單生成器生成的只是個(gè)表單外形,要用“表單設(shè)計(jì)器”加以修改和完善。例如,對(duì)剛才生成的快速表單添加四個(gè)按鈕控件和一個(gè)容器控件:先添一個(gè)容器,在容器里放置四個(gè)按鈕,并調(diào)整四個(gè)按鈕在容器的中央,可使用布局工具欄使之布局合適。(如圖7-6)圖 用表單生成器生成快速表單6.2.4控件的屬性及方法的編輯前面添加了四個(gè)命令按鈕控件,運(yùn)行表單可以發(fā)現(xiàn),它們不起任何作用。若要它們能響應(yīng)事件,就要設(shè)置控件的屬性及方法。例如:要求四個(gè)命令按鈕能響應(yīng)如下事件: 單擊COMMAND1:顯示上一條記錄。 單擊COMMAND2:顯示下一條記錄。 單擊COMMAND3:顯示第一條記錄。

25、單擊COMMAND4:顯示最后一條記錄。我們先設(shè)置COMMAND1的屬性。步驟如下:1. 打開(kāi)屬性窗口,在選擇對(duì)象下拉表框中選中COMMAND1。2. 在“布局”選項(xiàng)卡中選擇“Caption”(標(biāo)題),在文本框中將原標(biāo)題“Command1”改為“上一條記錄”。這時(shí)按鈕COMMAND1的標(biāo)題變?yōu)椤吧弦粭l記錄”。3. 在“方法程序”選項(xiàng)卡中選擇“Click Event”(單擊事件),雙擊。4. 在彈出的“COMMAND1.CLICK”代碼窗口中輸入如下的方法程序:IF .NOT. BOF()SKIP 1THISFORM.REFRESHELSETHISFORM.COMMAND1.ENABLED=.F

26、. ENDIF IF .NOT. EOF()THISFORM. COMMAND2.ENABLED=.T. ENDIF5. 關(guān)閉代碼窗口。COMMAND1的單擊事件的方法程序即編寫完成。6. 其它三個(gè)按鈕的屬性設(shè)置同上。將COMMAND2的Caption設(shè)置為“下一條記錄”,方法程序?yàn)椋篒F .NOT. EOF()SKIPTHISFORM.REFRESH ELSETHISFORM.COMMAND2.ENABLED=.F. ENDIF IF .NOT. BOF()THISFORM.COMMAND1.ENABLED=.T. ENDIF將COMMAND3的Caption設(shè)置為“第一條記錄”,方法程序?yàn)?/p>

27、: GO TOP THISFORM.REFRESH IF .NOT. EOF()THISFORM. COMMAND2.ENABLED=.T. ENDIF IF .NOT. BOF()THISFORM.COMMAND1.ENABLED=.T. ENDIF將COMMAND4的Caption設(shè)置為“最后一條記錄”,方法程序?yàn)椋?GO BOTTOM THISFORM.REFRESH IF .NOT. EOF()THISFORM. COMMAND2.ENABLED=.T. ENDIF IF .NOT. BOF()THISFORM.COMMAND1.ENABLED=.T. ENDIF最后,我們?cè)僭O(shè)置容器控

28、件Container1的布局屬性:選中容器控件,在“布局”選項(xiàng)卡中選中Special Effect,設(shè)置為“凹下”,使之產(chǎn)生凹下的效果。6.2.5 表單的運(yùn)行表單設(shè)計(jì)完成后,可運(yùn)行一下看效果是否滿意。執(zhí)行表單主要有兩種方法: 方法1: 選擇“表單”菜單中的“執(zhí)行表單”命令 方法2: 在命令窗口中輸入命令: DO FORM 表單文件名 NOSHOW如果使用了NOSHOW子句,表單運(yùn)行時(shí)將不顯示,直到表單對(duì)象的Visiable屬性被設(shè)置為.T.或者調(diào)用了SHOW方法。(翻到書P192)6.6基本型控件6.6.1標(biāo)簽(Label)標(biāo)簽用以顯示文本.1.Caption屬性被顯示的文本在Caption屬

29、性中指定.需要注意的是,在設(shè)計(jì)代碼時(shí),應(yīng)該用Name屬性值來(lái)引用標(biāo)簽而不是用Caption屬性.同樣的概念也可類推到按鈕等.如以下”確定”按鈕,在程序代碼中如要引用這個(gè)按鈕應(yīng)該是button1.而不是”確定”(以上屬性也適用于其他大多數(shù)控件)2.Alignment屬性指定標(biāo)簽在表單中的對(duì)齊方式.0-左對(duì)齊,1-右對(duì)齊,2-居中(以上屬性也適用于其他大多數(shù)控件)3.F-屬性Fontsize:字體的大小Forecolor:字體的顏色Fontunderline:字體是否有下劃線FontItalic:字體是否斜體FontBold:字體是否是粗體6.6.2命令按鈕(Command Button)命令按鈕

30、用來(lái)完成某個(gè)特定功能.實(shí)現(xiàn)該功能的代碼放在click事件中,用戶通過(guò)單擊該按鈕就可以執(zhí)行這段代碼.1. Enabled屬性指定該按鈕是否可用.如將其值設(shè)置為.F.,則該按鈕灰顯.2. Visible屬性指定該對(duì)象是否可見(jiàn).如將其值設(shè)置為.F.,則該按鈕不可見(jiàn).(以上兩屬性也適用于其他大多數(shù)控件)6.6.3文本框(Text)為表單提供輸入框.1. ControlSource屬性為文本框指定要綁定的數(shù)據(jù)源.(可以是一個(gè)字段或內(nèi)存變量).運(yùn)行時(shí),文本框首先顯示該變量的內(nèi)容.而用戶對(duì)文本框的編輯結(jié)果,也會(huì)最終保存到該變量中.(該屬性也適用于編輯框,復(fù)選框,列表框,組合框等控件)2. Value屬性該文

31、本框的值.可以通過(guò)設(shè)置該屬性為文本框指定初始值.若要在運(yùn)行時(shí)不讓用戶改變所顯示的文本,可把文本框的ReadOnly屬性設(shè)置為.T.,或者把文本框的Enabled屬性設(shè)為.F.(該屬性也適用于其他大多數(shù)控件)3.PasswordChar屬性設(shè)置回顯字符.例如,將該屬性值設(shè)置為*,則不論用戶輸入什么字符都將以*回顯.常用于密碼的輸入框.6.6.4 編輯框(Edit)編輯框用于輸入或更改文本的內(nèi)容。與文本框不同的是,編輯框可以輸入多段文字。編輯框一般用來(lái)顯示長(zhǎng)的字符型字段或備注型字段(將編輯框與備注型字段綁定),并且允許用戶編輯文本。編輯框也可顯示一個(gè)文本文件或剪貼板中的文本。1.HideSelec

32、tion屬性指當(dāng)編輯框失去焦點(diǎn)時(shí),編輯框中選定的文本是否依然處于選定狀態(tài).如果設(shè)置為.T.(默認(rèn)值),則表示當(dāng)失去焦點(diǎn)時(shí),編輯框中選定的文本不顯示為選定狀態(tài),只有當(dāng)再次獲得焦點(diǎn)時(shí)才重新處于選定狀態(tài);如果該屬性值設(shè)置為.F.,則表示失去焦點(diǎn)時(shí),該編輯框中選定的文本仍處于選定狀態(tài).1.ReadOnly屬性指定用戶能否對(duì)編輯框中的內(nèi)容進(jìn)行修改.默認(rèn)為.F.,即非只讀.如果設(shè)置為.T.,則該編輯框?yàn)橹蛔x.ReadOnly屬性和Enabled屬性是有區(qū)別的.盡管在Readonly屬性為.T.和Enabled屬性為.F.的情形下該編輯框都無(wú)法編輯,但前種情況下光標(biāo)依然可以落入其中,而后者則不行.本特點(diǎn)也適

33、用于其他一些控件(文本框,表格等)2.ScrollBars屬性為了方便用戶處理長(zhǎng)文本的數(shù)據(jù),VFP還提供了可用來(lái)顯示垂直滾動(dòng)條的ScollBars屬性。該值為2(默認(rèn)值)時(shí),允許有滾動(dòng)條,為0時(shí)則沒(méi)有滾動(dòng)條.3.SelStart屬性返回用戶在編輯框中所選文本的起始點(diǎn)位置或插入點(diǎn)位置.該屬性也適用于文本框,組合框等控件4.SelLength屬性返回用戶在編輯框中所選文本的字符數(shù).若沒(méi)有文本被選定,則返回05.SelText屬性返回用戶編輯區(qū)內(nèi)選定的文本,如果沒(méi)有選定任何文本,則返回空串書例6.6設(shè)置編輯框的hideselection屬性為.F.設(shè)置查找按鈕的click事件代碼:n=AT(&quo

34、t;example",Thisform.edit1.value)if n<>0thisform.edit1.selstart=n-1thisform.edit1.sellength=len("example")elsewait windows "ûÓÐÆ¥Åä" timeout 1endif設(shè)置替換按鈕的click事件代碼:if thisform.edit1.seltext='example'thisform.edit1.seltext

35、='exercise'elsewait windows 'ûÓÐÑ¡ÔñÐèÒªÖû»µÄµ¥´Ê' timeout 1endif6.6.5 復(fù)選框(Check) 復(fù)選框是從多個(gè)選項(xiàng)中選擇任意個(gè)選項(xiàng),可以選一個(gè),也可以多選或全選。1.Caption屬性用來(lái)指定復(fù)選框旁邊的標(biāo)題2.ControlSource屬性指明復(fù)選框所綁定的數(shù)據(jù)源.作為數(shù)據(jù)

36、源的字段變量或內(nèi)存變量,其類型可以是數(shù)值型或邏輯型.對(duì)于數(shù)值型變量,值0.1.2(.null.)分別對(duì)應(yīng)復(fù)選框未被選中,被選中和不確定.對(duì)于邏輯型變量,.f.,.t.null.分別表示它的未被選中,被選中和不確定3.value屬性如果沒(méi)有設(shè)置controlsource屬性,那么可以通過(guò)value屬性來(lái)設(shè)置或返回復(fù)選框的狀態(tài).該屬性默認(rèn)值為0【例】利用復(fù)選框來(lái)控制輸入或輸出文本的字體風(fēng)格。 編寫表單的Activate事件代碼:this.text1.setfocus 為復(fù)選框的click事件編寫的代碼:thisform.text1.fontbold=this.valuethisform.text1

37、.fontitalic=this.valuethisform.text1.fontunderline=this.value復(fù)選框支持圖形按鈕形式,只需將復(fù)選框的style屬性設(shè)置為1-圖形,然后分別設(shè)置picture、downpicture和disablepicture屬性為所需要的圖象,這樣就可以把復(fù)選框設(shè)計(jì)成圖文并茂的圖形按鈕形式了。其中,picture為正常狀態(tài)時(shí)按鈕的圖象,downpicture為按鈕按下時(shí)的圖象,disablepicture為按鈕不可用時(shí)的圖象。6.6.6 列表框(List) 列表框顯示一列數(shù)據(jù),用戶可以從中選擇一個(gè)或多個(gè)數(shù)據(jù)存入到指定變量中.列表框要顯示哪個(gè)數(shù)據(jù)表中

38、的數(shù)據(jù)呢?1. RowsourceType屬性和RowSource屬性RowsourceType屬性指明列表框中條目的數(shù)據(jù)源類型,RowSource屬性指明列表框中條目的數(shù)據(jù)源.其具體含義見(jiàn)書上p201表6.15最常見(jiàn)的一種情況是列表框要顯示的數(shù)據(jù)處在哪個(gè)數(shù)據(jù)表中,就把它的rowsourcetype屬性設(shè)置成6-字段,再把它的rowsource屬性設(shè)置成相應(yīng)的字段值.例如,在表單中放上一個(gè)list和一個(gè)command,設(shè)置表單的數(shù)據(jù)環(huán)境為課程.dbf,然后將這個(gè)list的rowsourcetype屬性設(shè)置成6-字段,再把它的rowsource屬性設(shè)置成相應(yīng)的字段.運(yùn)行即可看出效果. 2.Col

39、umnCount屬性指定列表框的列數(shù)3.ControlSource屬性指定要綁定的數(shù)據(jù)源4.Value屬性返回列表框中被選中的條目.該屬性可以是字符型(默認(rèn)),也可以是數(shù)值型.如果ControlSource屬性指定了字段或內(nèi)存變量,那么Value屬性與ControlSource屬性指定的變量就會(huì)具有相同的數(shù)據(jù)和類型.對(duì)于列表框和組合框,該屬性只讀.5.MultiSelect屬性指定用戶能否在列表框中進(jìn)行多重選擇.0或.f.(默認(rèn))不可多選,1或.t.可多選,由用戶按CTRL鍵來(lái)實(shí)現(xiàn)多選.6.list屬性用以存取列表框中數(shù)據(jù)條目的字符串?dāng)?shù)組.見(jiàn)書例8.Selected屬性指出列表框內(nèi)的某個(gè)條目是

40、否處于選定狀態(tài).如書例.例如在前面的例子中,為command的click事件加上如下代碼:if thisform.list1.selected(3)messagebox('選中了!')endif運(yùn)行表單,當(dāng)list中的第三個(gè)條目被選中時(shí),按下按鈕就會(huì)彈出對(duì)話9.additem方法為列表框增加一個(gè)新條目【例】為列表框添加四個(gè)選項(xiàng)ABCD。首先設(shè)置列表框list1的RowSourceType取值為0,然后為列表框所在的表單的init事件添加如下代碼:thisform.list1.additem(A')thisform.list1.additem(B')thisfor

41、m.list1.additem(C')thisform.list1.additem(D')則每次表單啟動(dòng)初始化的時(shí)候都會(huì)為列表框添加四個(gè)選項(xiàng)?!纠縿h除列表框中的一個(gè)選項(xiàng)C。thisform.list1.removeitem(3)6.6.7 組合框(Combo) 使用組合框可以把相關(guān)的信息以列表框的形式顯示出來(lái)。我們可以通過(guò)設(shè)置它的style屬性來(lái)指定組合框的類型。0-下拉組合框 2-下拉列表框(1)下拉組合框:用戶可以單擊下拉組合框上的按鈕以查看選擇項(xiàng),也可以直接在按鈕旁邊的框中直接輸入一個(gè)新項(xiàng)。 (2)下拉列表框它與下拉組合框的區(qū)別是:下拉組合框允許直接輸入新內(nèi)容,并將新內(nèi)

42、容作為一個(gè)項(xiàng)直接添加到組合框?qū)ο笾?,下拉列表框不允許輸入新內(nèi)容,只能在列表項(xiàng)中選擇現(xiàn)有項(xiàng)目。1.怎樣給組合框中的下拉列表里添加值呢?可以簡(jiǎn)單地用生成器來(lái)生成.右擊彈出生成器.添加的值是手工輸入的數(shù)據(jù)在”列表項(xiàng)”中選擇”手工輸入數(shù)據(jù)”,然后在下面的列中手工輸入添加的值如果是數(shù)據(jù)表中的字段值,則選擇”表或視圖中的字段”2.Value屬性返回組合框中被選中的條目.該屬性可以是字符型(默認(rèn)),也可以是數(shù)值型.例如,為上例的表單添加一個(gè)按鈕,寫入click事件代碼:if bo1.value='計(jì)算方法'messagebox('ok!')endif則當(dāng)組合框選中了計(jì)算方法后

43、,會(huì)彈出ok!書例6.7(略)表單的load和unload事件代碼:close database all組合框的Interactive事件代碼t_table=this.valueselect 1use &t_tablethisform.list1.rowsource=t_table命令按鈕”確定”的click事件代碼:sele 1set fields tofor i=1 to thisform.list1.listcountif thisform.list1.selected(i)mf=thisform.list1.list(i)set fields to &mfendifen

44、dforbrowse6.6.8 計(jì)時(shí)器(Timer)計(jì)時(shí)器獨(dú)立于用戶的操作,它對(duì)時(shí)間作出反應(yīng),在一定的時(shí)間間隔內(nèi)觸發(fā)執(zhí)行某一任務(wù)。在運(yùn)行過(guò)程中計(jì)時(shí)器控件是不可見(jiàn)的,因此不考慮該控件的位置和大小。它的主要屬性是:Interval: 規(guī)定計(jì)時(shí)器觸發(fā)的時(shí)間間隔,單位是ms。它的取值范圍是02 147 483 647,即最長(zhǎng)時(shí)間間隔不超過(guò)24天?!纠恐谱鞑粩嚅W現(xiàn)的圖片。在表單中添加一個(gè)圖片控件image1,并設(shè)置好圖片源。(設(shè)置好圖像控件的stretch屬性為1,然后再選擇圖象文件!)思路: 不斷地改變圖片對(duì)象的Visible屬性來(lái)實(shí)現(xiàn)“閃爍”的效果。 為計(jì)時(shí)器填寫Init事件代碼:PUBLIC c

45、ccc=-1 為計(jì)時(shí)器填寫Timer事件代碼:cc=-ccIF cc=1THISFORM.image1.visible=.t.ELSETHISFORM.image1.visible=.f.ENDIF 為計(jì)時(shí)器的Interver屬性設(shè)置為500,即每500毫秒觸發(fā)一次程序。運(yùn)行表單,即可看到圖片的閃爍效果。如果要使其越閃越快,只需在末尾再加兩句:if erval>20erval=erval-15endif如果在放完的時(shí)候給出提示信息,只需要在上面的if語(yǔ)句中再加一句:Else

46、Messagebox(放完了!還看!)運(yùn)行后發(fā)現(xiàn)確實(shí)有效果,但是死循環(huán).需要在這之后再加上這幾句:thisform.releaseclear eventsquit6.7容器型控件容器型控件主要有命令組,選項(xiàng)組,表格,頁(yè)框等.容器與其所包含的控件一般都有自己的屬性,方法和事件,例如頁(yè)框和它所包含的頁(yè)面都有自己的Enabled屬性.如果是要指明其中的某一個(gè)頁(yè)面的Enabled屬性而不是整個(gè)頁(yè)框的Enabled屬性,必須從屬性窗口的對(duì)象下拉列表框中來(lái)選中它.其他的容器型控件也是如此,例如要為命令組中某一個(gè)命令按鈕的click事件編程,必須先在屬性窗口的對(duì)象下拉列表框中來(lái)選中它后再雙擊,否則就是對(duì)整個(gè)

47、命令按鈕組的click事件進(jìn)行編程了.6.7.1命令按鈕組(CommandGroup)1.ButtonCount屬性指定命令組中按鈕的數(shù)目2.Buttons屬性用于存取命令組中各按鈕的數(shù)組.用戶可以利用該數(shù)組為命令組中的命令按鈕設(shè)置屬性或調(diào)用其方法.例如:ThisForm.myCommandG.Buttons(2).Visible=.f.即將命令組myCommandG中的第2個(gè)按鈕設(shè)置成隱藏的.3.Value屬性返回命令組中的當(dāng)前按鈕的值.該值可以是數(shù)值型也可以是字符型.如果是數(shù)值型(默認(rèn)),則指明是第幾個(gè)按鈕;如果是字符型,則指明的是Caption屬性為該值的按鈕.例:DO CASE CASE This.Value=1 *第一個(gè)按鈕被按下后要執(zhí)行的動(dòng)作 CASE This.value=2 *第二個(gè)按鈕被按下后要執(zhí)行的動(dòng)作 ENDCASE或者這樣寫:DO CASE CASE This.Value=確定 *確定按鈕被按下后要執(zhí)行的動(dòng)作 CASE This.value=取消 *取消按鈕被按下

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論