Visual FoxPro程序設(shè)計(jì):第8章 面向?qū)ο蟮某绦蛟O(shè)計(jì)_第1頁(yè)
Visual FoxPro程序設(shè)計(jì):第8章 面向?qū)ο蟮某绦蛟O(shè)計(jì)_第2頁(yè)
Visual FoxPro程序設(shè)計(jì):第8章 面向?qū)ο蟮某绦蛟O(shè)計(jì)_第3頁(yè)
Visual FoxPro程序設(shè)計(jì):第8章 面向?qū)ο蟮某绦蛟O(shè)計(jì)_第4頁(yè)
Visual FoxPro程序設(shè)計(jì):第8章 面向?qū)ο蟮某绦蛟O(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩115頁(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)介

第8章面向?qū)ο蟮某绦蛟O(shè)計(jì)8.1面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念8.2可視化編程基礎(chǔ)8.3常用控件的基本屬性8.4程序設(shè)計(jì)的基本方法8.5修改和定制表單內(nèi)容概述傳統(tǒng)的編程方法是面向過(guò)程、按順序進(jìn)行的機(jī)制,這種編程方法的缺點(diǎn)是程序員始終要關(guān)心什么時(shí)候發(fā)生什么事情。VFP是采用事件驅(qū)動(dòng)編程機(jī)制的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言之一。與傳統(tǒng)的面向過(guò)程程序設(shè)計(jì)相比,它具有許多優(yōu)點(diǎn),其中最主要的是,面向?qū)ο蟪绦蛟O(shè)計(jì)是按照人類(lèi)認(rèn)識(shí)世界的方法和思路方式來(lái)解決問(wèn)題。表單設(shè)計(jì)是VFP程序設(shè)計(jì)的主要工作之一,表單為數(shù)據(jù)庫(kù)信息的顯示、輸入和編輯提供了非常簡(jiǎn)便的方法,同時(shí)設(shè)計(jì)表單的過(guò)程就是設(shè)計(jì)程序界面的過(guò)程。本章主要介紹面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念,如何利用表單向?qū)Ш捅韱卧O(shè)計(jì)器設(shè)計(jì)表單,表單中各種常用控件的使用方法,結(jié)合例題介紹了表單及其控件的屬性、事件和方法的調(diào)用方法。8.1面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念8.1.1基本概念

VFP支持面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-OrientedProgramming),面向?qū)ο蟪绦蛟O(shè)計(jì)所追求的目標(biāo)是將現(xiàn)實(shí)世界的問(wèn)題求解盡可能簡(jiǎn)單化,采用符合人類(lèi)處理問(wèn)題的思維方式。它用“對(duì)象”表現(xiàn)事物,用“事件”表示處理事物的動(dòng)作,用“方法”表現(xiàn)處理事物的過(guò)程,用“消息”傳遞對(duì)象與對(duì)象之間的相互聯(lián)系。面向?qū)ο蟪绦蛟O(shè)計(jì)方法不同于傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì),采用事件驅(qū)動(dòng)編程機(jī)制。在事件驅(qū)動(dòng)編程中,程序員只要編寫(xiě)響應(yīng)用戶動(dòng)作的程序,如選擇命令、移動(dòng)鼠標(biāo)等,而不必考慮按精確次序執(zhí)行的每個(gè)步驟。在這種機(jī)制下,不必編寫(xiě)一個(gè)大型的程序,而是建立一個(gè)由若干微小程序組成的應(yīng)用程序,這些微小程序可以由用戶啟動(dòng)的事件來(lái)激發(fā)。

1.對(duì)象現(xiàn)實(shí)世界的實(shí)體——事、物、概念等,都統(tǒng)稱為對(duì)象(Object)。如:一個(gè)人是一個(gè)對(duì)象,一臺(tái)PC機(jī)是一個(gè)對(duì)象。如果將一臺(tái)PC機(jī)拆開(kāi)來(lái)看便有“顯示器、機(jī)箱、軟盤(pán)驅(qū)動(dòng)器、硬盤(pán)、鍵盤(pán)……”,每一個(gè)又都是一個(gè)對(duì)象,即PC機(jī)對(duì)象是由多個(gè)“子”對(duì)象組成的。此時(shí)PC機(jī)稱為一個(gè)包容器(Container)對(duì)象。在面向?qū)ο笙到y(tǒng)中一切成份都是對(duì)象,大到整個(gè)系統(tǒng)、項(xiàng)目、數(shù)據(jù)庫(kù)、表、表單,小到窗口、控件都被視為對(duì)象。從面向?qū)ο缶幊痰慕嵌葋?lái)看,對(duì)象是一個(gè)邏輯實(shí)體,它包括數(shù)據(jù)和完成處理所需要的程序代碼,是數(shù)據(jù)和代碼的組合,一個(gè)對(duì)象建立以后,其操作就通過(guò)與該對(duì)象有關(guān)的屬性、事件和方法來(lái)描述。在VFP中,常見(jiàn)的對(duì)象有:表單、文本框、列表框等。

在VFP中稱對(duì)象的特征和數(shù)據(jù)為“屬性”,稱由對(duì)象識(shí)別的一個(gè)動(dòng)作為“事件”,稱在對(duì)象上完成的操作過(guò)程為“方法”。定義了對(duì)象的屬性、事件和方法就決定對(duì)象的外觀和它的動(dòng)作。因此,對(duì)象是屬性、事件和方法的集合體,用戶通過(guò)屬性、事件和方法來(lái)處理對(duì)象。對(duì)象的基本特點(diǎn)是具有屬性,用來(lái)描述自己的狀態(tài);有方法,構(gòu)成自己的行為;有可以識(shí)別的事件,響應(yīng)外界的刺激。綜上所述,可以把對(duì)象初步理解為:對(duì)象是一個(gè)封裝了屬性、事件和方法的實(shí)體。2.屬性對(duì)象的屬性用來(lái)表示它的狀態(tài)和特征,以命令按鈕為例,其位置、大小、顏色等狀態(tài),都可用屬性來(lái)表示。屬性值的設(shè)置或修改可以通過(guò)屬性窗口來(lái)進(jìn)行,也可以通過(guò)編程的方法在程序運(yùn)行的時(shí)候來(lái)改變對(duì)象的屬性。在程序中設(shè)置屬性的一般格式是:

表單名.對(duì)象名.屬性名=屬性值

3.事件所謂事件,是由VFP預(yù)先定義好的、能夠被對(duì)象識(shí)別的動(dòng)作,如鼠標(biāo)單擊(Click)事件、雙擊(DblClick)事件等。一個(gè)對(duì)象可以有多個(gè)事件,不同的對(duì)象能識(shí)別的事件也不完全相同。對(duì)象的事件是固定的,用戶不能建立新的事件。一個(gè)事件對(duì)應(yīng)于一個(gè)程序,稱為事件過(guò)程。事件一旦被觸發(fā),系統(tǒng)立即就去執(zhí)行與該事件對(duì)應(yīng)的事件過(guò)程。雖然一個(gè)對(duì)象可以擁有多個(gè)事件過(guò)程,但在程序中要使用什么事件過(guò)程,則有用戶根據(jù)程序的具體要求來(lái)確定,對(duì)于必須響應(yīng)的事件需要編寫(xiě)該事件的事件過(guò)程,而不必理會(huì)的事件不需要編寫(xiě)事件過(guò)程,只要交給VFP處理即可。4.方法方法(Method)是與對(duì)象相關(guān)聯(lián)的過(guò)程,但又不同于一般的VFP過(guò)程,用于完成某種特定的功能而不一定響應(yīng)某一事件,如釋放表單等方法。方法程序緊密地和對(duì)象連接在一起,并且與一般VFP過(guò)程的調(diào)用方式也有所不同。方法被“封裝”在對(duì)象之中,不同的對(duì)象具有不同的內(nèi)部方法,用戶可以根據(jù)需要建立新的方法,方法的代碼是在程序中調(diào)用,調(diào)用的格式是:

[[變量名]=]對(duì)象名.方法名()8.1.2類(lèi)“類(lèi)”源于日常生活中類(lèi)別、分類(lèi)概念。1.類(lèi)的基本概念類(lèi)(Class)是已經(jīng)定義了的關(guān)于對(duì)象的特征和行為的模板,是對(duì)象的原型。類(lèi)是對(duì)一組相似對(duì)象的共同抽象描述,它將該組對(duì)象所具有的共同特征集中起來(lái),用于說(shuō)明該組對(duì)象的性質(zhì)和能力。在表單控件工具欄中每個(gè)控件按鈕都代表一個(gè)類(lèi),用其中某個(gè)按鈕在表單上創(chuàng)建一個(gè)控件就是一個(gè)對(duì)象。從上可以看出:(1)類(lèi)和對(duì)象是兩個(gè)關(guān)系密切的概念,但并不相同,類(lèi)規(guī)定并提供了對(duì)象具有的屬性、事件和方法,因此類(lèi)是對(duì)象的藍(lán)圖和框架。例如,工廠生產(chǎn)零件時(shí),需要零件圖作為依據(jù),所生產(chǎn)的零件具有相同的特征和功能,零件圖就是類(lèi),零件就是對(duì)象。(2)對(duì)象通過(guò)類(lèi)來(lái)產(chǎn)生,所以對(duì)象是類(lèi)的具體化和實(shí)例化,故對(duì)象又稱為類(lèi)的實(shí)例。一個(gè)類(lèi)可以實(shí)例化多個(gè)對(duì)象,各個(gè)對(duì)象都具有所屬類(lèi)描述的屬性和方法,但每個(gè)對(duì)象的屬性值可以不同,實(shí)例化對(duì)象才是可運(yùn)行的實(shí)體。例如,汽車(chē)可以看做一個(gè)類(lèi),具有相同的屬性特征和功能,汽車(chē)具有運(yùn)動(dòng)等功能,大小、顏色等屬性。某一輛汽車(chē)就是對(duì)象,是汽車(chē)類(lèi)的實(shí)例。因此,具有汽車(chē)類(lèi)描述的功能和屬性,但其大小、顏色等屬性值可能不同,汽車(chē)類(lèi)描述的功能只有在具體某輛汽車(chē)上才能實(shí)現(xiàn)。所有對(duì)象的屬性、事件和方法都是在定義類(lèi)時(shí)被指定,由于類(lèi)是定義了對(duì)象特征、外觀和行為的模板,所以對(duì)象由類(lèi)生成,生成的對(duì)象也自然具有相同的屬性、事件和方法。例如,由復(fù)選框類(lèi)、單選按鈕類(lèi)可以生成各種形式的復(fù)選框、單選按鈕。2.類(lèi)的特征類(lèi)是模板,它規(guī)定了對(duì)象的屬性、事件和方法程序;同時(shí)它還具有:封裝性、繼承性和多態(tài)性。(1)抽象性一般而言,抽象是對(duì)復(fù)雜的實(shí)體的簡(jiǎn)明表示,它強(qiáng)調(diào)了我們所關(guān)心的或認(rèn)為重要的信息,而將不重要的信息予以忽略。例,我們對(duì)電話的認(rèn)識(shí)已經(jīng)抽象化了,撥號(hào)、講話、聽(tīng)音這就是我們印象中的電話,而不關(guān)心和了解電話內(nèi)部的線路和工作原理。面向?qū)ο蟪绦蛟O(shè)計(jì)利用抽象性,提取一個(gè)類(lèi)或?qū)ο笈c眾不同的特征,而不對(duì)該類(lèi)或?qū)ο蟮乃行畔⑦M(jìn)行類(lèi)和容器的層次結(jié)構(gòu)處理,抽象性能夠忽略對(duì)象的內(nèi)部細(xì)節(jié),隱藏不必要的復(fù)雜性。(2)封裝性封裝是面向?qū)ο蟪绦蛟O(shè)計(jì)的術(shù)語(yǔ),實(shí)際上是一種信息隱藏技術(shù),是指包含和隱藏對(duì)象信息,如內(nèi)部數(shù)據(jù)結(jié)構(gòu)、對(duì)象的方法程序和代碼等。封裝就是指將對(duì)象的方法程序和屬性代碼包裝在一起。封裝將操作對(duì)象的內(nèi)部復(fù)雜性與應(yīng)用程序的其它部分隔離開(kāi)來(lái)。例如,我們將電話的零部件和線路封裝在電話的外殼里,這樣使用戶看不到電話內(nèi)部線路的復(fù)雜性,只專(zhuān)心撥號(hào)、講話、聽(tīng)音,從而也產(chǎn)生用戶對(duì)電話具有撥號(hào)、講話、聽(tīng)音功能這種抽象化的認(rèn)識(shí)。又例如,當(dāng)對(duì)一個(gè)命令設(shè)置Caption屬性時(shí),不必了解標(biāo)題字符串是如何存儲(chǔ)的。對(duì)象的抽象性通過(guò)封裝得以實(shí)現(xiàn)。(3)繼承性繼承是一個(gè)有力的工具,例如父類(lèi)中實(shí)現(xiàn)了某一個(gè)特定功能,那么在它的子類(lèi)中就自動(dòng)獲得該功能,這樣就免去了重新為子類(lèi)編寫(xiě)同樣代碼的重復(fù)勞動(dòng)。子類(lèi)可以繼承并保持父類(lèi)的所有特性和功能,但也可以修改、重置甚至取消有父類(lèi)繼承來(lái)的某些特性和功能,使父類(lèi)的功能在子類(lèi)中有所變異,也可以增加父類(lèi)所沒(méi)有的特性和功能,子類(lèi)的任何變化都不影響它的父類(lèi)。繼承性體現(xiàn)了類(lèi)層次中的“共享”機(jī)制。例如,由基本類(lèi)型的電話(撥號(hào)、講話、聽(tīng)音功能),可以派生出電話傳真機(jī)、移動(dòng)電話、公用投幣電話等,這些電話都繼承了電話基本類(lèi)型的撥號(hào)、講話、聽(tīng)音功能,又添加了各自的獨(dú)特功能。

由于有了繼承性,當(dāng)把基本類(lèi)型的電話由撥號(hào)改為按鍵,其它類(lèi)型的電話都可以改為按鍵,繼承性使我們不必研究每種電話如何實(shí)現(xiàn)按鍵。繼承性即子類(lèi)延用父類(lèi)特征的能力。一個(gè)子類(lèi)可以擁有其父類(lèi)的全部功能,然后在此基礎(chǔ)上,可以添加其他控件或功能。由于有繼承性,就可以使得在一個(gè)類(lèi)上所做的改動(dòng)反映到它的所有子類(lèi)當(dāng)中,若發(fā)現(xiàn)類(lèi)中有一個(gè)小錯(cuò)誤,用戶不必逐一修改各子類(lèi)的代碼,只需要在父類(lèi)中改動(dòng),然后這個(gè)變動(dòng)將會(huì)體現(xiàn)在全部子類(lèi)中。這種自動(dòng)更新可節(jié)省用戶的時(shí)間和精力。若類(lèi)的層次具有多層,則這種繼承性還具有傳遞作用,即下層的子類(lèi)可繼承其以上各層父類(lèi)的全部功能。(4)多態(tài)性我們知道F1~F12功能鍵,不同的軟件環(huán)境對(duì)每一功能鍵有不同的功能定義。同是一鍵在不同的軟件中就會(huì)產(chǎn)生不同的操作,這就是多態(tài)性。每個(gè)對(duì)象不可能只是單獨(dú)工作,完成某一任務(wù)可能要某些對(duì)象通過(guò)協(xié)同工作來(lái)完成,一個(gè)對(duì)象可以請(qǐng)求或命令另一個(gè)對(duì)象完成某一操作。對(duì)象之間是通過(guò)“消息”傳遞實(shí)現(xiàn)相互聯(lián)系。向某個(gè)對(duì)象發(fā)送消息,就是要求該對(duì)象執(zhí)行一個(gè)操作。一個(gè)消息只說(shuō)明接受者應(yīng)該執(zhí)行哪種操作,而不說(shuō)明怎樣去執(zhí)行這個(gè)操作,操作的具體執(zhí)行由消息接受者確定。所謂多態(tài)性是指同一個(gè)消息可以根據(jù)接收消息的對(duì)象不同采用不同的操作。也就說(shuō),當(dāng)不同的對(duì)象收到相同的消息時(shí)將產(chǎn)生不同的操作。例如VFP中的加“+”運(yùn)算符,不僅可以進(jìn)行數(shù)值相加,而且可以進(jìn)行字符串相加。這完全取決于表達(dá)式中加法運(yùn)算符“+”所操作的對(duì)象的數(shù)據(jù)類(lèi)型。3.基類(lèi)基類(lèi)是VFP內(nèi)部預(yù)先定義的類(lèi),在“新建類(lèi)”對(duì)話框的“派生于”下拉列表框中包含了全部基類(lèi),例如表單、表單集,表單控件工具欄中所有的控件也是基類(lèi)?;?lèi)可作為用戶自定義類(lèi)的基礎(chǔ),用戶可以在此基礎(chǔ)上創(chuàng)建新類(lèi),并增添自己需要的新功能。由基類(lèi)可以創(chuàng)建對(duì)象,對(duì)象將繼承該類(lèi)的功能。每一個(gè)對(duì)象都會(huì)對(duì)特定事件作出響應(yīng),對(duì)一些最小事件(基本事件)的響應(yīng),各類(lèi)是共同的。基類(lèi)的最小事件集——每個(gè)基類(lèi)都可能有各自的區(qū)別于其它基類(lèi)事件,但VFP基類(lèi)都至少包含以下三個(gè)事件。Init(初始):當(dāng)對(duì)象創(chuàng)建時(shí)激活。Destroy(破壞):當(dāng)對(duì)象從內(nèi)存中釋放時(shí)激活。Error(錯(cuò)誤):當(dāng)類(lèi)中的事件或方法發(fā)生錯(cuò)誤時(shí)激活。4.子類(lèi)子類(lèi)是以一個(gè)類(lèi)為起點(diǎn)而建立起來(lái)的新類(lèi),也就是說(shuō)用戶可以在已有類(lèi)的基礎(chǔ)上創(chuàng)建已有類(lèi)的子類(lèi),創(chuàng)建子類(lèi)時(shí)所基于的類(lèi)稱為子類(lèi)的父類(lèi)。一個(gè)子類(lèi)可以擁有派生它的父類(lèi)的全部功能,即具有繼承性,并在此基礎(chǔ)上,可添加其它控件或功能。由于父類(lèi)和子類(lèi)存在繼承性,對(duì)父類(lèi)功能的所有修改都將會(huì)反映到子類(lèi)中,所以當(dāng)某個(gè)類(lèi)發(fā)現(xiàn)問(wèn)題時(shí),就不需要逐個(gè)修改它的子類(lèi),而只需修改父類(lèi)即可。8.2.1容器類(lèi)和控件類(lèi)VisualFoxPro中類(lèi)可以分為容器類(lèi)和控件類(lèi)。1容器類(lèi)容器類(lèi)可以容納別的對(duì)象,這些對(duì)象可以是容器類(lèi)對(duì)象,也可以是控制類(lèi)對(duì)象,并且允許訪問(wèn)這些對(duì)象。例如,表單類(lèi)是一個(gè)容器,它可以放入命令按鈕控件、復(fù)選框控件、編輯框控件、文本框控件等一組控件類(lèi),并將這些類(lèi)作為一個(gè)整體進(jìn)行操作。容器類(lèi)提供了一種將多個(gè)對(duì)象按需要進(jìn)行組合的功能。容器類(lèi)中的對(duì)象還可以是容器類(lèi)的,這就形成了容器類(lèi)對(duì)象的嵌套,因此容器類(lèi)是允許有層次的。8.2可視化編程基礎(chǔ)VFP提供的容器類(lèi)的類(lèi)別、名稱和所能包含的控件類(lèi)對(duì)象如下表所示。容器名稱能包含的對(duì)象表單集FormSet表單、工具欄表單Form頁(yè)框、任意控件、容器命令按鈕組CommandButtonGroup命令按鈕選項(xiàng)按鈕組OptionButtonGroup選項(xiàng)按鈕表格Grid表格列表格列Clumn標(biāo)頭對(duì)象以及除了表單集、表單、工具欄、計(jì)時(shí)器和列對(duì)象以外的任意對(duì)象頁(yè)框PageFrame頁(yè)面頁(yè)面Page任意控件、容器容器Container任意控件工具欄ToolBar任意控件、頁(yè)框和容器2.控件類(lèi)控件類(lèi)可以包含在容器類(lèi)中,但不能容納其它對(duì)象,它的封裝比容器類(lèi)更為嚴(yán)密。容器類(lèi)與控制類(lèi)的根本區(qū)別在于,容器類(lèi)可以按層次訪問(wèn)容器類(lèi)中的對(duì)象;而控制類(lèi)的對(duì)象都是同一層的對(duì)象,不能再包含下一層對(duì)象。VFP提供的控件類(lèi)的類(lèi)別及名稱如下表所示。

控件名稱控件名稱文本框TextBox計(jì)時(shí)器Timer編輯框EditBox標(biāo)簽Label列表框ListBox圖象Image組合框ComboBox線條Line復(fù)選框CheckBox形狀Shape命令按鈕CommandButton微調(diào)Spinner標(biāo)頭HeaderOLE綁定控件OLEBoundControl自定義Custon8.2.2控件與對(duì)象1.常用控件21個(gè)2.對(duì)象的包容層次8.2.3對(duì)象引用所謂對(duì)象引用,是指如何在程序設(shè)計(jì)和程序運(yùn)行中對(duì)這些對(duì)象進(jìn)行控制和操作。對(duì)于容器中的對(duì)象,要處理它需要知道它相對(duì)于容器層次結(jié)構(gòu)中的層次關(guān)系。在引用某個(gè)對(duì)象時(shí),就需要標(biāo)識(shí)出該對(duì)象在容器層次結(jié)構(gòu)中的層次。例如,同在文件目錄結(jié)構(gòu)中,要訪問(wèn)一個(gè)文件就要標(biāo)識(shí)出訪問(wèn)該文件的路徑。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,常常需要引用對(duì)象,或引用對(duì)象的屬性、事件和方法。下面介紹對(duì)象引用的格式。1.常用的引用關(guān)鍵字

THISFORMSET表示包含該對(duì)象的表單集

THISFORM表示包含該對(duì)象的表單

THIS表示當(dāng)前對(duì)象

PARENT該對(duì)象的直接容器2.引用方式在VFP中,對(duì)象的引用分為絕對(duì)引用和相對(duì)引用。(1)對(duì)象絕對(duì)引用對(duì)象絕對(duì)引用通過(guò)提供對(duì)象完整的容器層次來(lái)引用對(duì)象。

例如:在嵌套的容器中,使命令按鈕1(Command1)可用,使命令按鈕2(Command2)禁用,可以通過(guò)設(shè)置命令按鈕的Enabled屬性來(lái)實(shí)現(xiàn)。Formset.Form.PageFrame.Page.Command1.Enabled=.T.(表單集.表單.頁(yè)框.頁(yè).命令按鈕.Enabled=.T.)Formset.Form.PageFrame.Page.Command2.Enabled=.F.

(Enabled屬性——指定對(duì)象能否響應(yīng)用戶引發(fā)的事件,允許在運(yùn)行時(shí)將對(duì)象設(shè)置啟用(.T.)或被禁止(.F.)狀態(tài))。(2)對(duì)象相對(duì)引用對(duì)象相對(duì)引用是通過(guò)使用一些屬性和關(guān)鍵字,可以直接從對(duì)象某層次中引用對(duì)象。對(duì)象相對(duì)引用時(shí),要表示出從哪一級(jí)對(duì)象開(kāi)始引用對(duì)象。用于相對(duì)引用的屬性和關(guān)鍵字,在容器層次結(jié)構(gòu)中表示某個(gè)層次,其引用關(guān)系為:THISFORMSET.THISFORM.THIS.Property

(表單集.表單.對(duì)象.屬性)Parent.Object.Property(Parent.對(duì)象.屬性)例如:THISFORM.Command1.Caption="確定"通過(guò)Caption屬性設(shè)置命令按鈕Command1的標(biāo)題。而Command1是包含在表單中。THISFORMSET.Form1.Command1.Caption="確定"設(shè)置表單集中Form1表單里的Command1命令按鈕的標(biāo)題屬性。8.1.4對(duì)象屬性設(shè)置對(duì)象的屬性既可以在設(shè)計(jì)對(duì)象時(shí)設(shè)置,也可以在程序運(yùn)行時(shí)重新設(shè)置。在設(shè)計(jì)對(duì)象時(shí),通過(guò)“屬性”窗口可以直接設(shè)置屬性值,并且立即作用于對(duì)象(具體操作方法見(jiàn)7.2節(jié))。在設(shè)計(jì)對(duì)象時(shí)可以設(shè)計(jì)對(duì)象某事件的代碼程序,并在代碼程序中也可以設(shè)置對(duì)象屬性的代碼。這樣在運(yùn)行時(shí),當(dāng)該事件發(fā)生后觸發(fā)其代碼程序,將對(duì)對(duì)象屬性重新設(shè)置。在運(yùn)行時(shí)可以設(shè)置并可讀取屬性值的屬性稱“讀寫(xiě)屬性”;而在運(yùn)行時(shí)只能讀取屬性值的屬性稱“只讀屬性”。用戶在編程時(shí)可以將屬性值賦給變量,也可以直接參與表達(dá)式運(yùn)算等。

設(shè)置屬性值的基本語(yǔ)法格式是:Container.Object.Property=Value(即:容器.對(duì)象.屬性=值)例如:THISFORM.Image1.Visible=.T.&&設(shè)置表單中的圖像1可見(jiàn)THISFORM.Backcolor=rgb(128,128,128)&&設(shè)置表單的背景顏色在屬性設(shè)置時(shí),可能要為一個(gè)對(duì)象設(shè)置多個(gè)屬性,或者為同一容器中的多個(gè)對(duì)象設(shè)置屬性,都要給出相同的層次結(jié)構(gòu)中的從屬關(guān)系(類(lèi)似路徑)。為此VFP提供了WITH……ENDWITH,結(jié)構(gòu)語(yǔ)句,簡(jiǎn)化了設(shè)置多個(gè)對(duì)象、多個(gè)屬性的過(guò)程。例:WITHTHISFORMSET.Form1.Image1.Visible=.T..Image2.Visible=.F..Backcolor=RGB(255,0,255)ENDWITH8.1.5調(diào)用對(duì)象的方法當(dāng)一個(gè)對(duì)象識(shí)別到一個(gè)事件發(fā)生后,會(huì)對(duì)該事件作出響應(yīng),通過(guò)執(zhí)行該事件的代碼程序或調(diào)用方法程序?qū)崿F(xiàn)某種操作。例如,當(dāng)用鼠標(biāo)單擊命令按鈕時(shí),觸發(fā)命令按鈕的Click事件,隨即執(zhí)行Click事件對(duì)應(yīng)的代碼程序。一個(gè)對(duì)象有各種屬性、事件和方法,VFP為各種對(duì)象的各種屬性、事件和方法定義了默認(rèn)的屬性和代碼程序(過(guò)程),用戶不需要再一一全部進(jìn)行定義。但是對(duì)象的關(guān)鍵屬性、事件和方法需要用戶根據(jù)需要在設(shè)計(jì)時(shí)定義它的屬性值和過(guò)程,如果沒(méi)有指定相關(guān)事件的屬性值和處理程序,當(dāng)事件發(fā)生時(shí),該對(duì)象并不對(duì)事件產(chǎn)生反應(yīng)。

調(diào)用對(duì)象方法的基本語(yǔ)法是:Object.Method即:<對(duì)象>.<方法>這里對(duì)象引用同樣可以絕對(duì)引用或相對(duì)引用。例:THISFORM.Box(100,150)&&Box方法在表單中畫(huà)一個(gè)矩形

THISFORM.Refresh&&Refresh方法刷新表單有些方法需要帶有參數(shù),方法名后要有園括號(hào),如果方法要使用多個(gè)參數(shù),要把這些參放到方法名后的園括號(hào)內(nèi),并用逗號(hào)將它們分開(kāi)。8.1.6響應(yīng)事件當(dāng)事件發(fā)生時(shí),該事件的代碼程序(過(guò)程代碼)就將被執(zhí)行,這是對(duì)事件的響應(yīng)。對(duì)于控件類(lèi)對(duì)象,它們能夠識(shí)別的事件是固定的,用戶不能用程序設(shè)計(jì)方法再產(chǎn)生其它事件,但是可以設(shè)計(jì)和調(diào)用與這些事件相關(guān)的過(guò)程代碼。例如:對(duì)表單中標(biāo)題為“確認(rèn)”的命令按鈕為其Click事件添加如下過(guò)程代碼:SELECTRSDAAPPENABLANKREPLACERSDA.姓名WITHTHISFORM.TxtName.VauleTHISFORM.Release&&調(diào)用從內(nèi)存中釋放表單方法程序這樣,當(dāng)用戶單擊該“確認(rèn)”命令按鈕時(shí),將用TxtName文本框的Vaule屬性值替換表的姓名字段,然后釋放表單。1.事件的觸發(fā)方式事件有兩種觸發(fā)方式,第一種是用戶的干預(yù)觸發(fā)事件,如點(diǎn)擊鼠標(biāo),可以產(chǎn)生Click(單擊)、DoubleClick(雙擊)、MouseMove(移動(dòng)到)等事件,按鍵可以產(chǎn)生一個(gè)KeyPress(按鍵)事件。第二種事件觸發(fā)方式是VFP系統(tǒng)自動(dòng)產(chǎn)生事件,這類(lèi)事件占VFP事件的絕大部分。例如,當(dāng)創(chuàng)建對(duì)象時(shí),都會(huì)自動(dòng)產(chǎn)生Init(初始)事件;釋放對(duì)象時(shí),都會(huì)自動(dòng)產(chǎn)生Destroy(釋放)事件等。2.事件觸發(fā)順序?qū)τ谝粋€(gè)對(duì)象可以觸發(fā)多個(gè)事件,而且事件觸發(fā)也有先后順序。了解事件的觸發(fā)順序,并為不同事件編寫(xiě)出相應(yīng)的關(guān)聯(lián)代碼,是很重要的。對(duì)于表單事件的順序是Load(裝載)、Init(初始)、Show(顯示)、Activate(激活)、GotFocus(得到焦點(diǎn))。表單被釋放時(shí)的事件順序是LostFocus(失去焦點(diǎn))、Dcactivate(失去活動(dòng))、Destroy(破壞)、Unload(卸載)。8.2表單的建立表單(Form)就是一個(gè)輸入或顯示某種信息的界面(窗口),是VFP中最常見(jiàn)的界面之一,被大量應(yīng)用于人機(jī)交互界面的設(shè)計(jì)當(dāng)中。應(yīng)用表單設(shè)計(jì)功能,可以設(shè)計(jì)出具有Windows風(fēng)格的各種程序界面。圖所示的是一個(gè)典型的表單。表單也是進(jìn)行程序設(shè)計(jì)的基礎(chǔ),對(duì)話框和窗口都是表單的不同表現(xiàn)形式。7.2.1用表單向?qū)гO(shè)計(jì)表單利用表單向?qū)Э梢钥焖佟⒑?jiǎn)便地創(chuàng)建表單,避免書(shū)寫(xiě)代碼,但是,表單向?qū)У暮?jiǎn)便性也使得它只能按一定的模式來(lái)產(chǎn)生結(jié)果。表單向?qū)芤龑?dǎo)用戶選定表來(lái)產(chǎn)生實(shí)用的表維護(hù)窗口,窗口中含有所選的字段,還包含供用戶操作的各種按鈕等。

打開(kāi)向?qū)нx取對(duì)話框的最簡(jiǎn)單方法,是在“工具”菜單的“向?qū)А弊硬藛沃羞x定“表單”命令。另一種方法是:選定“文件/新建”命令,在新建對(duì)話框中選定表單選項(xiàng)按鈕,然后單擊“向?qū)А卑粹o。如圖所示。

下面舉例說(shuō)明利用表單向?qū)Мa(chǎn)生表單的過(guò)程。例7-2

使用表單向?qū)?chuàng)建一個(gè)能維護(hù)表的表單。(1)打開(kāi)表單向?qū)?duì)話框:在“工具”菜單的“向?qū)А弊硬藛沃羞x定“表單”命令,打開(kāi)向?qū)нx取對(duì)話框。在向?qū)нx取對(duì)話框中選擇“表單向?qū)А边x項(xiàng)(“一對(duì)多表單向?qū)нm用于具有一對(duì)多關(guān)系的兩個(gè)表的表單),單擊“確定”按鈕,出現(xiàn)如圖所示的“表單向?qū)ё侄芜x取”對(duì)話框。(2)步驟“1-字段選取”:?jiǎn)螕羯蠄D中“數(shù)據(jù)庫(kù)和表”區(qū)域的對(duì)話按鈕,在出現(xiàn)的對(duì)話框中選擇學(xué)生信息表,將可用字段列表框的所有字段移到選定字段列表框中,并單擊“下一步”按鈕,出現(xiàn)如下圖所示的表單向?qū)нx擇表單樣式對(duì)話框。(3)步驟“2-選擇表單樣式”:在上圖所示的窗口中選擇浮雕式,并單擊“下一步”按鈕,出現(xiàn)如下圖所示的“表單向?qū)判虼涡颉睂?duì)話框。(4)步驟“3-排序次序”:在上圖所示的窗口中將“可用的字段或索引標(biāo)識(shí)”列表框中的學(xué)號(hào)字段以升序添加到“選定字段”列表框中,然后單擊“下一步”按鈕,出現(xiàn)如下圖所示的表單向?qū)瓿蓪?duì)話框。(5)步驟“4-完成”:在上圖所示的窗口中的“請(qǐng)鍵入表單標(biāo)題”文本框中鍵入“學(xué)生信息維護(hù)”。單擊“完成”按鈕,在出現(xiàn)的對(duì)話框中鍵入表單文件名XSXXWH并保存。通常在保存之前應(yīng)預(yù)覽一下表單,若要修改表單,可逐步選定“上一步”按鈕。(6)執(zhí)行表單:選擇“程序/運(yùn)行”命令,在出現(xiàn)的對(duì)話框中選定xsxxwh.scx,單擊“運(yùn)行”按鈕,結(jié)果如下圖所示。

7.2.2利用表單設(shè)計(jì)器設(shè)計(jì)表單1.打開(kāi)表單設(shè)計(jì)器表單設(shè)計(jì)器是VFP提供的一個(gè)功能非常強(qiáng)大的表單設(shè)計(jì)工具,它是一個(gè)可視化工具,表單的全部設(shè)計(jì)工作都在表單設(shè)計(jì)器中完成。打開(kāi)表單設(shè)計(jì)器有3種方法:(1)選擇“文件/新建”命令,在出現(xiàn)的“新建”對(duì)話框中選擇“表單”單選按鈕并單擊“新建文件”按鈕。(2)在項(xiàng)目管理器中選擇“文檔”選項(xiàng)卡,選中“表單”并單擊“新建”按鈕。(3)在命令窗口中使用CREATEFORM命令。打開(kāi)后的表單設(shè)計(jì)器如下圖所示。在表單設(shè)計(jì)器窗口中最主要的組成部分是表單設(shè)計(jì)器工具欄,各個(gè)工具按鈕的功能說(shuō)明如下:設(shè)置Tab次序:在表單的設(shè)計(jì)過(guò)程中,單擊這個(gè)按鈕,可以顯示當(dāng)按動(dòng)Tab鍵時(shí),光標(biāo)在表單的各個(gè)控件上移動(dòng)的順序。數(shù)據(jù)環(huán)境窗口:在表單設(shè)計(jì)過(guò)程中,單擊此按鈕,可以結(jié)合用戶界面同時(shí)設(shè)計(jì)一個(gè)依附的數(shù)據(jù)環(huán)境。屬性窗口:在表單設(shè)計(jì)過(guò)程中,單擊此按鈕,可以在屬性窗口中查看和修改各個(gè)控件的屬性。代碼窗口:在表單設(shè)計(jì)過(guò)程中,單擊此按鈕,可以在代碼窗口中編輯各對(duì)象的方法及事件代碼。

表單控件工具欄:在表單設(shè)計(jì)過(guò)程中,單擊此按鈕,可以打開(kāi)工具欄對(duì)話框,選擇各種控件進(jìn)行用戶界面設(shè)計(jì)。調(diào)色板工具欄:在表單設(shè)計(jì)過(guò)程中,單擊此按鈕,可以利用調(diào)色板工具欄進(jìn)行各對(duì)象前景與背景顏色的設(shè)計(jì)。布局工具欄:在表單設(shè)計(jì)過(guò)程中,單擊此按鈕,可以利用布局工具欄對(duì)對(duì)象進(jìn)行位置和對(duì)齊設(shè)置。表單生成器:?jiǎn)?dòng)表單生成器,直接以填表的方式進(jìn)行相關(guān)對(duì)象的各項(xiàng)設(shè)置,以便快速建立表單。自動(dòng)格式:在表單設(shè)計(jì)過(guò)程中,單擊此按鈕,可以對(duì)各控件進(jìn)行格式設(shè)置。

2.進(jìn)行表單設(shè)計(jì)打開(kāi)表單設(shè)計(jì)器后,就可以對(duì)表單進(jìn)行設(shè)計(jì)了,具體內(nèi)容見(jiàn)后面的介紹。3.保存表單表單設(shè)計(jì)或修改后,選擇“文件”菜單的“保存”命令或單擊常用工具欄的“保存”按鈕,在出現(xiàn)的對(duì)話框中輸入文件名,即可保存表單。4.表單的運(yùn)行運(yùn)行表單的方法有多種,常用的有:(1)在命令窗口中輸入DOFORM<表單文件名>。(2)在表單設(shè)計(jì)器中單擊“常用工具欄”中的“運(yùn)行”按鈕。7.2.3在表單中對(duì)控件進(jìn)行設(shè)置在設(shè)計(jì)表單時(shí),可使用表單控件工具欄中的各種控件按鈕創(chuàng)建控件,并可以對(duì)已建立的控件進(jìn)行移動(dòng)、刪除、復(fù)制和改變大小等操作。1.表單控件工具欄表單控件工具欄如下圖所示,除首尾的選定對(duì)象、查看類(lèi)、生成器鎖定和按鈕鎖定4個(gè)按鈕是輔助按鈕外,其余按鈕都是控件定義按鈕。

2.創(chuàng)建控件單擊表單控件工具欄中的控件按鈕,然后在表單適當(dāng)位置單擊鼠標(biāo)即可在表單的相應(yīng)位置畫(huà)出該控件,也可以在表單上拖動(dòng)鼠標(biāo)畫(huà)出控件。查看類(lèi)文本框命令按鈕選項(xiàng)按鈕組組合框微調(diào)控件圖象頁(yè)框ActiveX綁定控件形狀分隔符按鈕鎖定選定對(duì)象標(biāo)簽編輯框命令按鈕組復(fù)選框列表框表格時(shí)鐘OLE控件線條容器超級(jí)鏈接生成器鎖定3.控件的選定、縮放、移動(dòng)和刪除控件創(chuàng)建以后,往往需要對(duì)控件位置等進(jìn)行操作。操作方法如下:(1)選定控件選定單個(gè)控件:?jiǎn)螕艨丶?;選定多個(gè)控件:按住Shift鍵,逐個(gè)單擊要選定的控件。(2)取消選定單擊已選定區(qū)域外某處。(3)縮放控件選定待縮放的控件,用鼠標(biāo)拖拉控件邊框上的小方塊可以使控件在相應(yīng)的方向放大和縮小。(4)移動(dòng)控件選定待移動(dòng)的控件,用鼠標(biāo)拖拉控件內(nèi)部,可以拖動(dòng)到表單的任何位置。(5)刪除控件選定待刪除的控件,按Delete鍵或選擇“編輯/清除”命令。4.設(shè)置控件的Tab鍵次序(1)什么是Tab鍵次序?在Windows中,用Tab鍵可使插入點(diǎn)由一個(gè)項(xiàng)目跳轉(zhuǎn)到另一個(gè),到底跳轉(zhuǎn)到那一個(gè)項(xiàng)目上,是由Tab鍵次序決定的。在表單中,由于有多個(gè)控件,因此也存在Tab鍵次序問(wèn)題。(2)設(shè)置Tab鍵次序表單中默認(rèn)的Tab次序是控件的添加次序。對(duì)控件的Tab次序重新設(shè)置的方法是:選擇“顯示”菜單的“Tab鍵次序”命令,按住Tab鍵以新的次序單擊各控件,然后松開(kāi)Tab鍵,單擊任意位置即可。注意:(1)次序從1開(kāi)始排列,由控件的TabIndex屬性確定,因此,也可以通過(guò)設(shè)置該屬性值來(lái)設(shè)置Tab鍵次序;(2)有些控件沒(méi)有TabIndex屬性,例如標(biāo)簽控件;(3)表格內(nèi)的對(duì)象不再進(jìn)行Tab設(shè)置。7.2.4表單屬性設(shè)置

表單的屬性用來(lái)表示它的特征,如位置、大小、樣式、邊框以及是否可以縮放和關(guān)閉等。表單設(shè)計(jì)器打開(kāi)后,只要選定“顯示”菜單的“屬性”命令,或者單擊表單設(shè)計(jì)器工具欄的“屬性”按鈕,就會(huì)顯示如右圖所示的表單屬性窗口。1.對(duì)象組合框:該下拉列表中以樹(shù)形結(jié)構(gòu)分層列出了當(dāng)前表單及其所包含的對(duì)象的名稱,單擊下拉按鈕,可以從中選擇表單中的對(duì)象。2.屬性分類(lèi)選項(xiàng)卡:這部分有5個(gè)小項(xiàng)目,分別如下:①全部——按字母排序的對(duì)象的所有屬性。②數(shù)據(jù)——與對(duì)象數(shù)據(jù)有關(guān)的屬性。③方法程序——對(duì)象的事件觸發(fā)程序和方法程序④布局——控制對(duì)象外觀的屬性,如顏色等。⑤其他——不屬以上②、③、④各項(xiàng)的屬性。

3.屬性列表框:列出當(dāng)前選項(xiàng)頁(yè)的所有屬性名及其取值。單擊屬性列表中的某一項(xiàng)目,則選中該屬性,稱為當(dāng)前屬性。4.屬性設(shè)置框:用來(lái)輸入或選擇當(dāng)前屬性的值。5.屬性信息:對(duì)當(dāng)前屬性的文字解釋。可見(jiàn),在表單設(shè)計(jì)器中設(shè)置屬性值時(shí),需要先在屬性窗口的對(duì)象列表框中選擇要修改的對(duì)象,再選擇屬性分類(lèi)選項(xiàng)頁(yè),找到屬性,最后在輸入框輸入新值。(有時(shí),屬性值可以從屬性列表選擇或通過(guò)對(duì)話框選擇)。表單屬性較多,下表列舉了常用的屬性。序號(hào)屬性說(shuō)明默認(rèn)值1Caption決定表單標(biāo)題欄顯示的文本Form12Name表單的名稱Form13AutoCenter決定表單初始化時(shí)是否居中.F.4BackColor決定表單背景顏色灰色5BorderStyle決定表單是無(wú)邊框,還是具有單線邊框、固定對(duì)話框或可調(diào)邊框3—可調(diào)邊框6Closable決定是否可以雙擊“關(guān)閉”按鈕來(lái)關(guān)閉表單.T.7ControlBox決定是否有控制圖標(biāo)和控制按鈕.T.8MaxButton決定表單是否具有最大化按鈕.T.9MinButton決定表單是否具有最小化按鈕.T.10Movable決定表單是否可以移動(dòng).T.11WindowState決定表單初始化時(shí)是最大化、最小化還是普通狀態(tài)0—普通12WindowType決定表單是無(wú)模式表單還是模式表單,如果表單是模式表單,用戶在訪問(wèn)應(yīng)用程序其他單元前,必須關(guān)閉這個(gè)表單0—無(wú)模式表單屬性的設(shè)置方法如下:例如:要將表單標(biāo)題“Form1”改為“演示”,步驟如下:先單擊“表單”,在“屬性”窗口選定“Caption”屬性,再在的屬性設(shè)置框中輸入“演示”,并按回車(chē)鍵或單擊“√”按鈕。當(dāng)然,在程序中也可以通過(guò)命令來(lái)設(shè)置,命令為:ThisForm.Caption="演示"。另外,VFP的主窗口又稱VFP的系統(tǒng)桌面,VFP指定了對(duì)象類(lèi)型的系統(tǒng)變量為_(kāi)screen,通過(guò)對(duì)它的引用可以設(shè)置主窗口的屬性。通過(guò)_screen可以象使用表單一樣設(shè)置系統(tǒng)桌面的屬性和方法。如:

_screen.Picture="map1.bmp"&&背景圖

_screen.Windowstate=2&&最大化

_screen.Cls&&清屏7.2.5表單常用事件與方法:InitEvent——表單初始事件,是運(yùn)行表單時(shí)首先執(zhí)行的事件過(guò)程,所以表單的變量定義、初值的設(shè)定、數(shù)據(jù)表的打開(kāi)等,可以在該事件過(guò)程中完成。在該事件過(guò)程中,也可以利用參數(shù),接收上級(jí)程序的數(shù)據(jù)。例如,在該事件過(guò)程加入以下語(yǔ)句:

PARAMETERSa1,a2THISFORM.Caption=a1THISFORM.BackColor=RGB(a2,0,0)則可以這樣調(diào)用這個(gè)表單:DOFORM"d:\vfp\form1"WITH"我的表單",255

UnloadEvent——表單釋放時(shí)產(chǎn)生的事件。在該事件中可以加入一些表單執(zhí)行結(jié)束時(shí)的善后工作。如果表單有返回值,可在此事件程序中的RETRUN語(yǔ)句中指定。如:form2.scx的Unload中有

RETURNcvalue

則調(diào)用命令如下:

DOFORM"form2"TOvalue1&&value1保存的是RETURN返回的值。(此種情況下,表單的WindowType應(yīng)設(shè)為1)。7.2.6表單數(shù)據(jù)環(huán)境設(shè)計(jì)器1.?dāng)?shù)據(jù)環(huán)境的概念數(shù)據(jù)環(huán)境是指定義表單或表單集時(shí)使用的數(shù)據(jù)源,包括表、視圖和關(guān)系。數(shù)據(jù)環(huán)境一旦建立,當(dāng)打開(kāi)或運(yùn)行表單時(shí),其中的表或視圖即自動(dòng)打開(kāi),而在關(guān)閉或釋放表單時(shí),表或視圖也能隨之關(guān)閉。數(shù)據(jù)環(huán)境的設(shè)計(jì)在表單設(shè)計(jì)時(shí)完成。2.?dāng)?shù)據(jù)環(huán)境設(shè)計(jì)器的使用數(shù)據(jù)環(huán)境設(shè)計(jì)器可以用來(lái)創(chuàng)建和修改數(shù)據(jù)環(huán)境,打開(kāi)數(shù)據(jù)環(huán)境設(shè)計(jì)器的方法是:在表單設(shè)計(jì)器的表單上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“數(shù)據(jù)環(huán)境”命令。出現(xiàn)如下圖所示的“數(shù)據(jù)環(huán)境設(shè)計(jì)器”窗口。當(dāng)然,在打開(kāi)數(shù)據(jù)環(huán)境設(shè)計(jì)器窗口時(shí)會(huì)要求向其中添加表或視圖。3.“數(shù)據(jù)環(huán)境”菜單

在打開(kāi)“數(shù)據(jù)環(huán)境設(shè)計(jì)器”窗口后,在VFP菜單中就會(huì)增加一個(gè)“數(shù)據(jù)環(huán)境”菜單,菜單中各項(xiàng)命令功能如下:“添加”命令:選擇此命令會(huì)出現(xiàn)“添加表和視圖”對(duì)話框,通過(guò)該窗口可以將表和視圖添加到數(shù)據(jù)環(huán)境中。表添加后,若兩個(gè)表原來(lái)已存在永久關(guān)系,則會(huì)在兩個(gè)表之間自動(dòng)顯示表示關(guān)系的連線。用戶也可以在兩表之間添加或刪除連線。添加連線的方法是:從父表的字段拖到子表的索引;刪除連線的方法是:按Delete鍵刪除?!耙迫ァ泵睿捍嗣钣脕?lái)在數(shù)據(jù)環(huán)境設(shè)計(jì)器窗口中移去一個(gè)選中的表或視圖?!盀g覽”命令:選擇該命令可在瀏覽窗口中顯示選中的表或視圖,以便瀏覽或編輯表或視圖的內(nèi)容。7.3表單控件設(shè)計(jì)7.3.1標(biāo)簽標(biāo)簽是能在表單上顯示文本內(nèi)容的控件,常用來(lái)顯示提示信息。標(biāo)簽有許多屬性,常用的屬性如下表所示。

序號(hào)屬性說(shuō)明默認(rèn)值1Caption指定標(biāo)簽用來(lái)顯示的文本Label12BorderStyle設(shè)置標(biāo)簽的邊框。0-無(wú),1-固定單線0-無(wú)(默認(rèn))3AutoSize設(shè)置是否自動(dòng)調(diào)節(jié)標(biāo)簽的大小。.F.-否,.T.-是.F.-否(默認(rèn))4BackStyle設(shè)置標(biāo)簽是否透明。0-透明,1-不透明1-不透明(默認(rèn))5Visible設(shè)置標(biāo)簽是否可見(jiàn)。.T.-是,.F.-否.T.-是(默認(rèn))6Name標(biāo)簽的名稱Label17WordWrap設(shè)置標(biāo)簽中顯示的文本是否可以換行.F.例7-3

在表單上添加一個(gè)標(biāo)簽,顯示的文本為“歡迎使用VisualFoxPro”。設(shè)計(jì)步驟如下:(1)啟動(dòng)表單設(shè)計(jì)器;(2)在表單上添加一個(gè)標(biāo)簽控件;(3)設(shè)置標(biāo)簽控件屬性:Caption改為“歡迎使用VisualFoxPro”,F(xiàn)ontSize改為16,AutoSize改為.T.。(4)單擊工具欄上的“運(yùn)行”按鈕運(yùn)行表單,結(jié)果如下圖所示。7.3.2文本框文本框控件是一種基本控件允許用戶輸入和編輯數(shù)據(jù)。1.文本框的常用屬性文本框的屬性較多,常用的屬性如下表所示。

序號(hào)屬性說(shuō)明默認(rèn)值1Name文本框的名稱Text12ReadOnly設(shè)置文本框?yàn)橹蛔x。.T.-只讀,.F.-可讀可寫(xiě).F.3PasswordChar設(shè)置文本框輸入時(shí)顯示的占位字符。占位字符主要用于輸入密碼,在屏幕上不顯示輸入的字符無(wú)4Value設(shè)置文本框的值無(wú)5Visible設(shè)置文本框是否可見(jiàn)。.T.-是,.F.-否.T.-是(默認(rèn))6ControlSource設(shè)置與文本框綁定的數(shù)據(jù)源無(wú)7SelStart返回選擇文本的起點(diǎn)或插入點(diǎn)的位置。08SelLength返回用戶選擇文本的字符數(shù)09SelText返回選擇的文本空串說(shuō)明:(1)Value屬性

Value屬性用于指定文本框的值,并在框中顯示出來(lái)。Value值既可在屬性窗口中輸入或編輯;也可用命令來(lái)設(shè)置,例如THIS.Value="VFP6.0"。Value值的類(lèi)型可以是數(shù)值型、字符型、日期型或邏輯型。(2)數(shù)據(jù)綁定文本框值除可通過(guò)直接輸入或設(shè)置Value屬性來(lái)得到外,還能通過(guò)數(shù)據(jù)綁定來(lái)獲得??丶臄?shù)據(jù)綁定是指將控件與某個(gè)數(shù)據(jù)源建立聯(lián)系,而數(shù)據(jù)源則是由控件的ControlSource屬性來(lái)指定。文本框與數(shù)據(jù)綁定后,控件值便與數(shù)據(jù)源的數(shù)據(jù)一致了。例如,以字段作為數(shù)據(jù)源,綁定后的文本框的值將由字段值決定;而字段值也將隨文本框值的改變而改變。

2.文本框常用的事件(1)GetFocusEvent:獲得焦點(diǎn)后發(fā)生。例如:THIS.SelStart=0THIS.SelLength=LEN(ALLTRIM(THIS.value)(2)WhenEvent:獲得焦點(diǎn)前發(fā)生,返回邏輯值。例如:

IFTHIS.Value>500=MESSAGEBOX("數(shù)據(jù)已經(jīng)很大,不允許再編輯")ENDIF(3)ValidEvent:失去焦點(diǎn)之前發(fā)生,常用于進(jìn)行數(shù)據(jù)合法性檢查,返回一個(gè)邏輯值,為假時(shí)不允許失去焦點(diǎn)。例如:

RETRUNTHIS.Value>=200andTHIS.Value<=300

(4)LostFocusEvent:控件失去焦點(diǎn)時(shí)發(fā)生的事件。此過(guò)程與Valid基本相同,但是不進(jìn)行合法性檢驗(yàn)。3.文本框的常用方法文本框的最常用方法是SETFOCUS,該方法使文本框獲得焦點(diǎn)。例如,THISFORM.TEXT1.SETFOCUS表示使本表單的TEXT1文本框獲得焦點(diǎn)。

例7-4設(shè)計(jì)一個(gè)接受口令的表單,如圖7-15所示。當(dāng)輸入口令時(shí),屏幕只顯示相同個(gè)數(shù)的“*”號(hào),若密碼正確,在表單上顯示“歡迎使用!”,否則顯示“對(duì)不起,口令錯(cuò)!”。操作步驟如下:(1)新建表單,將其標(biāo)題設(shè)置為“口令驗(yàn)證”。(2)添加一個(gè)標(biāo)簽,標(biāo)題設(shè)置為“請(qǐng)輸入口令”,并設(shè)置好字體等屬性。(3)在標(biāo)簽的下方再添加一個(gè)標(biāo)簽,標(biāo)題設(shè)置為空,AutoSize屬性設(shè)置為.T.,并設(shè)置好字體等屬性。(4)添加文本框,將其PasswordChar屬性設(shè)置為“*”。

(5)編寫(xiě)文本框的Valid事件代碼如下:A=THIS.VALUEIFA="ABCD"&&ABCD為設(shè)定的密碼

THISFORM.LABEL2.CAPTION="歡迎使用!"ELSETHISFORM.LABEL2.CAPTION="對(duì)不起,口令錯(cuò)!"THIS.VALUE=""ENDIF(6)保存并運(yùn)行表單,結(jié)果如下圖所示。7.3.3編輯框編輯框允許用戶輸入或更改文本,并允許輸入多段文本。編輯框常用的屬性如下表所示。編輯框與文本框的主要區(qū)別:(1)編輯框只能輸入或編輯文本數(shù)據(jù);而文本框則適用于字符型等4種類(lèi)型的數(shù)據(jù)。(2)文本框只能供用戶輸入一段數(shù)據(jù),而編輯框則能輸入多段文本。序號(hào)屬性說(shuō)明默認(rèn)值1Name編輯框的名稱Edit12ControlSource設(shè)置與編輯框綁定的數(shù)據(jù)源無(wú)3ScrollBars設(shè)置編輯框是否有滾動(dòng)條。0-沒(méi)有,2-垂直24SelStart返回選擇文本的起點(diǎn)或插入點(diǎn)的位置。05SelLength返回用戶選擇文本的字符數(shù)06SelText返回選擇的文本空串例7-5

設(shè)計(jì)一個(gè)簡(jiǎn)歷編輯窗口,用于編輯學(xué)生信息.dbf表中的簡(jiǎn)歷字段。操作步驟如下:(1)新建表單。(2)在表單數(shù)據(jù)環(huán)境中添加學(xué)生信息表。(3)數(shù)據(jù)環(huán)境中表的姓名字段和個(gè)人簡(jiǎn)歷字段拖至表單合適的位置。(4)保存并運(yùn)行表單,結(jié)果如下圖所示。7.3.4列表框列表框提供一個(gè)供用戶選擇的列表,但不接受輸入文本。列表框常用的屬性如下表所示。序號(hào)屬性說(shuō)明默認(rèn)值1Name列表框的名稱List12ControlSource設(shè)置與編輯框綁定的數(shù)據(jù)源無(wú)3RowSource列表中指定值的來(lái)源無(wú)4RowSourceType確定數(shù)據(jù)源的類(lèi)型:值、表、SQL語(yǔ)句、查詢和數(shù)組等無(wú)5ListIndex選定數(shù)據(jù)項(xiàng)的索引號(hào)06MultiSelect設(shè)置是否允許多項(xiàng)選擇.F.7ListCount返回列表框中列表項(xiàng)的個(gè)數(shù)(設(shè)計(jì)時(shí)不可用)列表框AddItem方法介紹:格式:Control.AddItem(Item,[Index][,Column])

功能:當(dāng)列表框的RowSource屬性為0時(shí),使用本方法可在列表中添加一個(gè)新項(xiàng)。說(shuō)明:①I(mǎi)tem表示添加的項(xiàng)目?jī)?nèi)容,為字符型表達(dá)式。②Index表示添加新項(xiàng)目的位置。缺省該參數(shù)時(shí),當(dāng)Sorted屬性為.T.時(shí)新項(xiàng)將按字母順序插入列表,否則添加到列表末尾。③Column表示放置新項(xiàng)目的列,缺省值為1。例7-6

設(shè)計(jì)一個(gè)表單,在文本框中輸入數(shù)據(jù)按回車(chē)后可將數(shù)據(jù)添加到列表框中。操作步驟如下:(1)新建一個(gè)表單,標(biāo)題設(shè)置為“我的表單”。(2)添加標(biāo)簽控件,標(biāo)題為“請(qǐng)輸入文本”。(3)添加文本框控件和列表框控件。(4)編寫(xiě)文本框KeyPress事件代碼如下:IFnKeyCode=13ANDNOTEMPTY(THIS.VALUE)THISFORM.LIST1.ADDITEM(THIS.VALUE)ENDIF(5)保存并運(yùn)行表單,結(jié)果如圖所示。7.3.5組合框組合框類(lèi)似列表框和文本框的組合,既可以在其中輸入文本,也可以從列表中選擇條目。組合框有兩種類(lèi)型:下拉組合框和下拉列表框。組合框的常用屬性和方法與列表框基本相似,在此不再敘述。另外,組合框的Style屬性用來(lái)設(shè)置是下拉組合框(0)還是下拉列表框(2)。例7-7設(shè)計(jì)一個(gè)表單,可將組合框中選中的項(xiàng)顯示在文本框中。操作步驟如下:(1)新建一個(gè)表單,標(biāo)題設(shè)置為“我的表單”。(2)添加標(biāo)簽控件,標(biāo)題為“你選擇的直轄市是”。(3)添加文本框控件,設(shè)置其具有只讀屬性。(4)添加列表框控件,Style屬性設(shè)置為2,RowSourceType屬性設(shè)置為1,RowSource屬性設(shè)置為:北京,上海,天津,重慶。(5)編寫(xiě)組合框Click事件代碼如下:THISFORM.TEXT1.VALUE=THIS.LIST(THIS.LISTINDEX)(6)保存并運(yùn)行表單,結(jié)果如圖所示。7.3.6命令按鈕與命令按鈕組1.命令按鈕命令按鈕在程序中起控制作用,用于完成某些特定的操作,如表單的關(guān)閉、操作的確認(rèn)等。其代碼通常是放置在Click事件中。命令按鈕常用屬性如表所示。序號(hào)屬性說(shuō)明默認(rèn)值1Name命令按鈕的名稱Command12Caption命令按鈕的標(biāo)題Command13Enabled設(shè)置命令按鈕是否可以被選擇.T.4Picture設(shè)置命令按鈕上顯示的圖形無(wú)例7-8

設(shè)計(jì)一個(gè)字體縮放表單。文本框字體初始大小為12,每單擊放大或縮小按鈕字體將增大或縮小3,最大不超過(guò)72,最小不超過(guò)9。界面如圖7-19所示。操作步驟如下:(1)新建一個(gè)表單,標(biāo)題設(shè)置為“我的表單”。(2)添加標(biāo)簽控件,標(biāo)題為“請(qǐng)輸入文本”。(3)添加文本框控件。(4)添加3個(gè)按鈕控件,其Caption屬性分別設(shè)置位放大、縮小和關(guān)閉。(5)編寫(xiě)放大按鈕Click事件代碼如下:IFTHISFORM.TEXT1.FONTSIZE<72THISFORM.TEXT1.FONTSIZE=THISFORM.TEXT1.FONTSIZE+3ENDIF編寫(xiě)縮小按鈕Click事件代碼如下:IFTHISFORM.TEXT1.FONTSIZE>9THISFORM.TEXT1.FONTSIZE=THISFORM.TEXT1.FONTSIZE-3ENDIF編寫(xiě)關(guān)閉按鈕Click事件代碼如下:THISFORM.RELEASE(6)保存并運(yùn)行表單,結(jié)果如圖所示。2.命令按鈕組命令按鈕組是一種容器控件,它可以包含多個(gè)命令按鈕,但命令按鈕組與組內(nèi)的命令按鈕都有自己的屬性、事件和方法。命令按鈕組常用屬性如表所示。

命令按鈕組是一個(gè)容器控件,組內(nèi)含有多個(gè)命令按鈕,其有關(guān)操作簡(jiǎn)述如下:(1)Click事件的判別命令按鈕組和組內(nèi)的各命令按鈕都有自己的Click事件,VFP根據(jù)用戶單擊的位置來(lái)觸發(fā)Click事件,若單擊組內(nèi)空白處,組控件的Click事件被觸發(fā),若單擊組內(nèi)某個(gè)命令按鈕,則該命令按鈕的Click事件被觸發(fā)。序號(hào)屬性說(shuō)明默認(rèn)值1Name命令按鈕組的名稱Commandgroup12ButtonCount命令按鈕組包含按鈕的個(gè)數(shù)2(2)當(dāng)單擊組內(nèi)某命令按鈕時(shí),組控件的Value屬性就會(huì)獲得一個(gè)數(shù)值型或字符型的值。當(dāng)Value屬性設(shè)置為命令按鈕的序號(hào)時(shí),Value屬性一個(gè)數(shù)值,即命令按鈕的序號(hào);當(dāng)Value屬性設(shè)置為命令按鈕的標(biāo)題時(shí),Value屬性一個(gè)字符串,即命令按鈕的標(biāo)題。這樣,在程序中就可以判別出單擊的是哪個(gè)命令按鈕。(3)命令按鈕組與組內(nèi)命令按鈕的編輯①命令按鈕組的編輯:選定命令按鈕組,就可以編輯了,但此時(shí)不能編輯組內(nèi)的命令按鈕。②組內(nèi)命令的編輯:右擊組控件,選擇快捷菜單的“編輯”命令,此時(shí)組控件四周出現(xiàn)一個(gè)斜線邊框,表示組控件被激活,用戶就可以選擇組內(nèi)的命令按鈕進(jìn)行編輯了。例7-9

設(shè)計(jì)一個(gè)表記錄瀏覽表單,如圖7-20所示。通過(guò)上記錄和下記錄按鈕可瀏覽不同的記錄。操作步驟如下:(1)新建一個(gè)表單,標(biāo)題設(shè)置為“學(xué)生信息瀏覽”。(2)在表單的數(shù)據(jù)環(huán)境中添加學(xué)生信息表,將表中需要顯示的字段拖至表單的適當(dāng)位置。(3)添加一個(gè)按鈕組控件,所含按鈕Command1的標(biāo)題為上記錄,Command2的標(biāo)題為下記錄。(4)編寫(xiě)Command1按鈕Click事件代碼如下:IFRECNO()>1SKIP-1THISFORM.REFRESHENDIF編寫(xiě)Command2按鈕Click事件代碼如下:IFRECNO()<RECCOUNT()SKIPTHISFORM.REFRESHENDIF(5)保存并運(yùn)行表單,結(jié)果如圖所示。7.3.7選項(xiàng)按鈕組選項(xiàng)按鈕組是一個(gè)可包含多個(gè)選項(xiàng)按鈕的容器。只允許用戶選定其中的一項(xiàng)。選項(xiàng)按鈕組Value屬性表明被選定選項(xiàng)的序號(hào),默認(rèn)為1,若設(shè)置為0,表示沒(méi)有一個(gè)選項(xiàng)呈選中狀態(tài)。另外,組內(nèi)的選項(xiàng)按鈕也有自己的Value屬性,1表示該選項(xiàng)被選中,0表示該選項(xiàng)沒(méi)有被選中。選項(xiàng)按鈕組常用屬性如表所示。序號(hào)屬性說(shuō)明默認(rèn)值1Name選項(xiàng)按鈕組的名稱Optiongroup12ButtonCount選項(xiàng)按鈕組包含選項(xiàng)的個(gè)數(shù)2例7-10

設(shè)計(jì)一個(gè)選項(xiàng)按鈕組使用表單。文本框字體初始大小為16,通過(guò)選項(xiàng)按鈕組來(lái)改變文本框中的字體。操作步驟如下:(1)新建一個(gè)表單,標(biāo)題設(shè)置為“我的表單”。(2)添加文本框控件,其FontSize為16。(3)添加一個(gè)選項(xiàng)按鈕組控件,其ButtonCount屬性4。(4)在選項(xiàng)按鈕組控件上單擊右鍵并選擇“編輯”命令,使其處于編輯狀態(tài),將4個(gè)選項(xiàng)按鈕的標(biāo)題分別改為宋體、黑體、楷體和隸書(shū)。(5)添加一個(gè)命令按鈕,其標(biāo)題為關(guān)閉。(6)編寫(xiě)選項(xiàng)按鈕組的Click事件代碼如下:DOCASECASETHISFORM.Optiongroup1.VALUE=1THISFORM.TEXT1.FONTNAME="宋體"CASETHISFORM.Optiongroup1.VALUE=2THISFORM.TEXT1.FONTNAME="黑體"CASETHISFORM.Optiongroup1.VALUE=3THISFORM.TEXT1.FONTNAME="楷體"CASETHISFORM.Optiongroup1.VALUE=4THISFORM.TEXT1.FONTNAME="隸書(shū)"ENDCASE編寫(xiě)關(guān)閉按鈕Click事件代碼如下:THISFORM.RELEASE(6)保存并運(yùn)行表單,結(jié)果如圖所示。7.3.8復(fù)選框單個(gè)復(fù)選框表示一個(gè)選項(xiàng)是選定還是不選定,多個(gè)復(fù)選框允許同時(shí)選擇多項(xiàng),而選項(xiàng)按鈕只能選擇其中的一項(xiàng)。復(fù)選框常用屬性如表所示。序號(hào)屬性說(shuō)明默認(rèn)值1Name復(fù)選框的名稱Check12Caption復(fù)選框的標(biāo)題,即其右側(cè)顯示的文本Check1等3Value設(shè)置復(fù)選框的狀態(tài),0或.F.表示未選中,1或.T.選中,2或.NULL.表示不可用04Style設(shè)置復(fù)選框的樣式,0為標(biāo)準(zhǔn)樣式,1為圖形樣式,在Picture屬性中設(shè)置圖形0例7-11

設(shè)計(jì)一個(gè)復(fù)選框使用表單。通過(guò)3個(gè)復(fù)選框來(lái)改變文本框中的字體的風(fēng)格。操作步驟如下:(1)新建一個(gè)表單,標(biāo)題設(shè)置為“我的表單”。(2)添加文本框控件,其FontSize為16。(3)添加3個(gè)復(fù)選框,標(biāo)題分別設(shè)置為粗體、斜體和下劃線。(4)添加一個(gè)命令按鈕,其標(biāo)題為關(guān)閉。(5)編寫(xiě)“粗體”復(fù)選框的Click事件代碼如下:THISFORM.TEXT1.FONTBOLD=THIS.VALUE編寫(xiě)“斜體”復(fù)選框的Click事件代碼如下:THISFORM.TEXT1.FONTITALIC=THIS.VALUE編寫(xiě)“下劃線”復(fù)選框的Click事件代碼如下:THISFORM.TEXT1.FONTUNDERLINE=THIS.VALUE編寫(xiě)關(guān)閉按鈕Click事件代碼如下:THISFORM.RELEASE(6)保存并運(yùn)行表單,結(jié)果如圖所示。7.3.9計(jì)時(shí)器計(jì)時(shí)器控件是設(shè)計(jì)與時(shí)間有關(guān)的表單中常用的控件,它能周期性地按時(shí)間間隔自動(dòng)執(zhí)行其Timer事件代碼。計(jì)時(shí)器控件在設(shè)計(jì)時(shí)是可見(jiàn)的,但在表單運(yùn)行時(shí)不可見(jiàn)。計(jì)時(shí)器控件最主要的屬性有兩個(gè):第一個(gè)是Interval屬性,表示Timer事件觸發(fā)的時(shí)間間隔,單位為毫秒;第二個(gè)是Enabled屬性,當(dāng)屬性為.T.時(shí)計(jì)時(shí)器被啟動(dòng),當(dāng)屬性為.F.時(shí),計(jì)時(shí)器的運(yùn)行被掛起,等屬性改為.T.時(shí)繼續(xù)運(yùn)行。計(jì)時(shí)器控件最主要的事件是Timer事件,其代碼表示計(jì)時(shí)器控件要執(zhí)行的操作。例7-12建立一個(gè)電子標(biāo)題板,如圖8-23所示,標(biāo)題“歡迎各位同學(xué)參加本次活動(dòng)”在表單的黃色區(qū)域內(nèi)自右至左地反復(fù)地移動(dòng)。操作步驟如下:(1)新建表單,將表單的從Caption屬性設(shè)置為“電子標(biāo)題板”;(2)添加標(biāo)簽控件,將其寬度設(shè)置與表單寬度相同,背景色設(shè)置為黃色,Caption屬性設(shè)置為空;(3)再添加標(biāo)簽控件,位于黃色區(qū)域內(nèi),Caption屬性設(shè)置為“歡迎各位同學(xué)參加本次活動(dòng)”,BackStyle屬性設(shè)置為“透明”;(4)添加一個(gè)計(jì)時(shí)器控件Timer1,其Interval屬性設(shè)置為500,Enabled屬性設(shè)置為.F.(5)添加一個(gè)命令按鈕Command1,其Caption屬性設(shè)置為“開(kāi)始”;(6)添加一個(gè)命令按鈕Command2,其Caption屬性設(shè)置為“關(guān)閉”;(7)編寫(xiě)事件代碼:

Timer事件代碼:

IFTHISFORM.LABEL2.LEFT+THISFORM.LABEL2.WIDTH>0THISFORM.LABEL2.LEFT=THISFORM.LABEL2.LEFT-5ELSETHISFORM.LABEL2.LEFT=THISFORM.WIDTHENDIF命令按鈕Command1的Click事件代碼:IFTHIS.CAPTION="暫停"THIS.CAPTION="繼續(xù)"THISFORM.TIMER1.ENABLED=.F.ELSETHIS.CAPTION="暫停"THISFORM.TIMER1.ENABLED=.T.ENDIF

命令按鈕Command2的Click事件代碼:

THISFORM.RELEASE(8)保存表單,并運(yùn)行,結(jié)果如圖所示。7.3.10表格表格控件是一個(gè)容器控件,它具有網(wǎng)格結(jié)構(gòu),有垂直滾動(dòng)條和水平滾動(dòng)條,可以同時(shí)操作和顯示多行數(shù)據(jù)。常用于顯示表中的內(nèi)容。表格的組成如下:(1)表格:由若干列組成;(2)列:一列可以顯示一個(gè)字段,列由列標(biāo)題和列控件組成;(3)列標(biāo)題:默認(rèn)顯示的是字段的名稱,允許修改;(4)列控件:每列中的各個(gè)單元格都用列控件來(lái)顯示字段值,列控件默認(rèn)為文本框。注意,表格、列、列標(biāo)題和列控件都有自己的屬性、事件和方法。表格常用屬性如表所示。序號(hào)屬性說(shuō)明默認(rèn)值1Name表格的名稱Grid12ColumnCount表格中列的數(shù)量,如設(shè)置為-1,則列數(shù)為數(shù)據(jù)源中子段的數(shù)目-13RecordSource指定表格中顯示的數(shù)據(jù)源無(wú)4RecordSourceType指定數(shù)據(jù)源的類(lèi)型:0—來(lái)源于表;1—?jiǎng)e名;2—提示,用戶在運(yùn)行時(shí)選擇表;3—查詢;4—SQL查詢語(yǔ)句1

表格控件通常用于表的顯示和編輯,此時(shí)應(yīng)先將要進(jìn)行編輯的表文件添加到表單的數(shù)據(jù)環(huán)境中,然后再將表格添加到表單中,表格建立后,就可以設(shè)置其屬性了,其屬性的設(shè)置是在“表格生成器”中完成的,如圖所示。例7-13

設(shè)計(jì)一個(gè)表格應(yīng)用表單,如下圖所示。通過(guò)表格來(lái)瀏覽學(xué)生信息。操作步驟如下:(1)新建一個(gè)表單,標(biāo)題設(shè)置為“我的表單”。(2)添加標(biāo)簽控件,其標(biāo)題為“學(xué)生信息瀏覽”。(3)添加表格控件,在表格上單擊右鍵,出現(xiàn)“表格生成器”對(duì)話框,在該對(duì)話框中,先打開(kāi)學(xué)生信息表,然后選擇需要顯示的字段,最后單擊“確定”按鈕返回。(4)保存并運(yùn)行表單,結(jié)果如圖所示。7.3.11微調(diào)控件微調(diào)控件可以在一定范圍內(nèi)控制數(shù)據(jù)的變化。除了能夠用鼠標(biāo)單擊控件右邊向上和向下的箭頭來(lái)增加和減少數(shù)字以外,還可直接輸入數(shù)值。微調(diào)控件常用屬性如表所示。序號(hào)屬性說(shuō)明默認(rèn)值1Name微調(diào)控件的名稱Spinner12KeyboardHighValue指定可用鍵盤(pán)輸入到微調(diào)控件文本框中的最大值21474836473KeyboardLLowValue指定可用鍵盤(pán)輸入到微調(diào)控件文本框中的最小值-21474836474SpinnerHighValue指定單擊微調(diào)按鈕時(shí),微調(diào)控件所允許的最大值21474836475SpinnerLowValue指定單擊微調(diào)按鈕時(shí),微調(diào)控件所允許的最小值-21474836476Value返回或指定控件的當(dāng)前值7Increment設(shè)置單擊一次微調(diào)按鈕時(shí)數(shù)值的增減量。1例7-14

設(shè)計(jì)一個(gè)表單,文本框顯示時(shí)間,通過(guò)微調(diào)控件設(shè)置時(shí)間刷新的時(shí)間間隔。操作步驟如下:(1)新建一個(gè)表單,標(biāo)題設(shè)置為“我的表單”。(2)添加一個(gè)文本框控件。(3)添加時(shí)鐘控件,其Interval屬性設(shè)置為1000。(4)添加微調(diào)控件,其Value屬性設(shè)置為1。(5)編寫(xiě)事件代碼:時(shí)鐘控件Timer事件代碼:THISFORM.TEXT1.VALUE=TIME()

微調(diào)控件InteractiveChange事件代碼:THISFORM.TIMER1.INTERVAL=THIS.VALUE*1000(6)保存并運(yùn)行表單,結(jié)果如圖所示。7.3.12頁(yè)框頁(yè)框控件實(shí)際上就是選項(xiàng)卡界面。在表單中,一個(gè)頁(yè)框可以有兩個(gè)以上的頁(yè)面,它們共同占有表單中的一塊區(qū)域。在某一時(shí)刻只有一個(gè)活動(dòng)頁(yè)面,而只有活動(dòng)頁(yè)面的控件才是可見(jiàn)的??梢杂檬髽?biāo)單擊需要的頁(yè)面頭來(lái)激活這個(gè)頁(yè)面。表單中的頁(yè)框是一個(gè)容器控件,它可以容納多個(gè)頁(yè)面,在每個(gè)頁(yè)面中,又可以有容器控件或其他控件。當(dāng)有多個(gè)數(shù)據(jù)庫(kù)屏幕需要顯示時(shí),頁(yè)框很有用處,它使用戶可以往前或往后翻頁(yè),而無(wú)需編寫(xiě)另外的程序。 頁(yè)框控件剛創(chuàng)建時(shí),只包含兩個(gè)頁(yè)面(Page),可以用PageCount屬性用來(lái)設(shè)置頁(yè)面數(shù)。在頁(yè)面中添加控件之前,要從用鼠標(biāo)右鍵彈出的快捷菜單中,選擇“編輯”命令,激活該容器。注意,在向頁(yè)框添加控件前,如果沒(méi)有將頁(yè)框作為容器激活,控件將添加到表單中,而不是頁(yè)框中,看上去好像是在頁(yè)面中。例7-15

在表單中設(shè)計(jì)一個(gè)包括兩個(gè)頁(yè)面的頁(yè)框,第一頁(yè)面顯示學(xué)生信息,第二頁(yè)面顯示學(xué)生成績(jī)。操作步驟如下:(1)打開(kāi)表單設(shè)計(jì)器;(2)在表單上創(chuàng)建一個(gè)頁(yè)框;(3)在表單數(shù)據(jù)環(huán)境中添加學(xué)生信息表和學(xué)生成績(jī)表;(4)設(shè)置頁(yè)標(biāo)題:在頁(yè)框上單擊右鍵并選擇“編輯”命令,選定“Page1”頁(yè)面,將頁(yè)面的Caption屬性設(shè)置為“瀏覽學(xué)生信息”,用同樣的方法將“Page2”頁(yè)面的Caption屬性設(shè)置為“瀏覽學(xué)生成績(jī)”。(5)在頁(yè)框中建立表格:在頁(yè)框處于編輯狀態(tài)時(shí),選擇“瀏覽學(xué)生信息”頁(yè),將數(shù)據(jù)環(huán)境中學(xué)生信息表窗口標(biāo)題拖放到該頁(yè),用同樣的方法在“瀏覽學(xué)生成績(jī)”頁(yè)中創(chuàng)建關(guān)于學(xué)生成績(jī)表的表格;(6)運(yùn)行表單,結(jié)果如圖所示。7.3.13圖象

圖象控件常用于在表單上顯示圖片。圖片控件常用的屬性如表所示。序號(hào)屬性說(shuō)明默認(rèn)值1Picture設(shè)置顯示的圖片文件名無(wú)2Visible設(shè)置圖片是否可見(jiàn).T.3BorderStyle設(shè)置圖片是否有邊框無(wú)4Strech設(shè)置圖片顯示方式:0-剪裁,1-等比填充,2-變比填充0例7-16

設(shè)計(jì)一個(gè)表單用于顯示向左或向右箭頭圖片。操作步驟如下:(1)打開(kāi)表單設(shè)計(jì)器;(2)在表單上創(chuàng)建一個(gè)圖象;(3)在屬性窗口設(shè)置其PICTURE屬性為d:\programfiles\microsoftvisualstudio\vfp98\tools\hexedit\left.bmp;(4)在表單上創(chuàng)建如下圖所示的選項(xiàng)按鈕組;(5)編寫(xiě)選項(xiàng)按鈕組的CLICK事件代碼如下:IFTHIS.VALUE=1THISFORM.IMAGE1.PICTURE="c:\programfiles\microsoftvisualstudio\vfp98\tools\hexedit\left.bmp"ELSETHISFORM.IMAGE1.PICTURE="c:\programfiles\microsoftvisualstudio\vfp98\tools\hexedit\right.bmp"ENDIF(6)運(yùn)行表單,結(jié)果如圖所示。7.3.14線條

線條控件用于在表單上線條,包括:斜線、水平線和垂直線。斜線傾斜度由控件區(qū)域?qū)挾扰c高度來(lái)決定,可拖動(dòng)控件區(qū)域的控制點(diǎn)來(lái)改變控件區(qū)域的寬度與高度,或通過(guò)改變Width和Height屬性值來(lái)實(shí)現(xiàn)。特別地,當(dāng)Width為0時(shí),表示垂直線,當(dāng)Height為0時(shí),表示水平線。7.3.15形狀形狀控件用于在表單上畫(huà)各種類(lèi)型的形狀,包括矩形、圓角矩形、正方形、圓角正方形、橢圓或圓。形狀類(lèi)型由Curvature、Width和Height屬性共同決定。如表所示。另外,F(xiàn)illStyle屬性用來(lái)指定用來(lái)填充形狀的圖案。若形狀控件遮住了某一控件,則對(duì)被遮住的控件單擊鼠標(biāo)無(wú)效,此時(shí)應(yīng)將形狀控件置后。置后的方法先選擇形狀控件,然后選擇“格式”菜單的“置后”命令即可。

CurvatureWidth和Height相等Width和Height不等0正方形矩形1—99圓角正方形,特別地,當(dāng)Curvature為99時(shí),形狀為圓圓角矩形,特別地,當(dāng)Curvature為99時(shí),形狀為橢圓例7-17設(shè)計(jì)一個(gè)表單,利用形狀控件通過(guò)改變曲率來(lái)控制圖形。操作步驟如下:(1)新建表單,添加“形狀”控件,“微調(diào)器”控件,“標(biāo)簽”控件和“命令按鈕”。(2)設(shè)置對(duì)象屬性如下:“形狀”控件:backcolor屬性:255,255,0?!拔⒄{(diào)器”控件:spinnerhighvalue屬性:99;spinnerlowvalue屬性:0,keyboardhighvalue屬性:99,keyboardlowvalue屬性:0,increment屬性:1,inputmask屬性:99。,“標(biāo)簽”控件:caption屬性:曲率。“命令按鈕”控件:caption屬性:退出。(3)編寫(xiě)“微調(diào)器”控件interactivechage事件代碼:thisform.shape1.curvature=this.value(4)“命令按鈕”控件click事件代碼:thisform.realease.(5)運(yùn)行表單,結(jié)果如圖所示。7.4表單高級(jí)設(shè)計(jì)7.4.1表單集除了使用頁(yè)框擴(kuò)展用戶界面之外,另外一種方法是使用表單集,一個(gè)表單集可包含多個(gè)表單,可以把這些表單作為一組進(jìn)行操作。運(yùn)行表單集時(shí),將加載表單集中所有表單和表單的所有對(duì)象。1.創(chuàng)建表單集表單集是在“表單設(shè)計(jì)器”窗口中創(chuàng)建的。表單集不可直接創(chuàng)建,必須在確定一個(gè)表單對(duì)象的基礎(chǔ)上才能創(chuàng)建,因此,在創(chuàng)建表單集時(shí),先新建一個(gè)表單或打開(kāi)已存在的表單,然后在“表單”菜單中選擇“創(chuàng)建表單集”命令,即可創(chuàng)建一個(gè)新的表單集。2.添加表單表單集創(chuàng)建后,可選擇“表單”菜單的“添加新表單”命令來(lái)向表單集添加表單,但此時(shí)只能添加新表單,而不能將已存在的表單添加進(jìn)來(lái)。3.刪除表單若要從表單集中刪除表單,先選定待刪除的表單,然后選擇“表單”菜單中的“移除表單”命令。但注意,如果表單集中只有一個(gè)表單,則只可刪除表單集而只剩下單個(gè)表單。4.刪除表單集當(dāng)表單集只剩一個(gè)表單時(shí),才可以刪除表單,可選擇“表單”菜單的“移除表單集”命令來(lái)刪除表單集,不過(guò)表單集刪除后,表單還存在。5.表單集的應(yīng)用例7-16

在表單集的不同表單中進(jìn)行控制和屬性的設(shè)置。操作步驟如下:(1)創(chuàng)建表單集及其表單:打開(kāi)表單設(shè)計(jì)器,已新建一個(gè)表單(Form1),在“表單”菜單中選擇“創(chuàng)建表單集”命令,創(chuàng)建一個(gè)新的表單集,然后選擇“表單”菜單的“添

溫馨提示

  • 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)論