第6章表單設(shè)計(jì)_第1頁
第6章表單設(shè)計(jì)_第2頁
第6章表單設(shè)計(jì)_第3頁
第6章表單設(shè)計(jì)_第4頁
第6章表單設(shè)計(jì)_第5頁
已閱讀5頁,還剩221頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第6章表單設(shè)計(jì)

6.1創(chuàng)建表單6.2容器和控件6.3數(shù)據(jù)環(huán)境6.4屬性窗口6.5添加新的屬性和方法6.6單文檔界面與多文檔界面

6.7表單設(shè)計(jì)范例6.8類的設(shè)計(jì)6.9典型的表單設(shè)計(jì)6.10消息對(duì)話框6.1創(chuàng)建表單 6.1.1利用表單向?qū)?chuàng)建表單 本節(jié)以學(xué)生成績(jī)管理系統(tǒng)中的學(xué)生成績(jī)表xscj為例(見表6.1),介紹采用表單向?qū)Э焖賱?chuàng)建表單的過程。表6.1學(xué)生成績(jī)表xscj的結(jié)構(gòu) 1.表單向?qū)? 表單向?qū)且粋€(gè)引導(dǎo)用戶用填表和選取選項(xiàng)的方式創(chuàng)建表單的工具。表單向?qū)г谄溥\(yùn)行過程中,給用戶提供了了比較詳細(xì)的中文提示,用戶只要按照提示的說明就可以完成相應(yīng)的操作。因此,表單向?qū)У氖共⒉焕щy。利用表單向?qū)?chuàng)建表單的步驟如下: (1)

在VisualFoxpro主菜單中,選擇“文件”菜單中的“新建”命令(即選取“文件”/“新建”),彈出“新建”對(duì)話框;在“新建”對(duì)話框中選擇“表單”單選按鈕,并單擊“向?qū)А卑粹o(見圖6-1),彈出“向?qū)нx取”對(duì)話框,見圖6-2。圖6-1“新建”窗口圖6-2“表單向?qū)А贝翱? (1)

在“向?qū)нx取”框中選取“表單向?qū)А保ㄒ妶D6-2)并單擊“確定”按鈕。 (2)

按圖6-3所示在“表單向?qū)А睂?duì)話框中指定用于表單的數(shù)據(jù)源(數(shù)據(jù)庫和表),然后進(jìn)行表單字段的選取操作,在本例中數(shù)據(jù)源選取c:\vfplx\xscj.dbf并將該表所有可用字段都選入到“選定字段”框中。接著單擊“下一步”按鈕。圖6-3選取表單的數(shù)據(jù)源 (4)按圖6-4所示在“表單向?qū)А睂?duì)話框中選擇表單樣式和表單按鈕類型。單擊“樣式”框中的樣式名時(shí),對(duì)話框左上方的放大鏡中會(huì)顯示出相應(yīng)樣式的例子;表單按鈕類型則利用“按鈕類型”單選按鈕進(jìn)行選擇,其中“文本按鈕”表示只在按鈕上顯示文字名稱,“圖片按鈕”表示在按鈕上顯示圖標(biāo);接著單擊“下一步”按鈕進(jìn)入步驟3。圖6-4選取表單樣式和表單按鈕類型 按圖6-5所示在“表單向?qū)А睂?duì)話框中選擇記錄排序所依據(jù)的字段和記錄的排序方式。最多可以選取3個(gè)字段來決定該表中所有記錄的排序,排序方式則有升序或降序兩種選擇。在本例中選取“xh”學(xué)號(hào)字段作為記錄的排序標(biāo)識(shí),排序方式則選升序,即按照學(xué)號(hào)的升序排序來顯示記錄。接著單擊“下一步”按鈕。圖6-5選擇記錄排序所依據(jù)的字段和記錄的排序方式 (6)

按圖6-6所示在“表單向?qū)А睂?duì)話框中選擇保存表單的方式,建議選擇“保存表單并在表單設(shè)計(jì)器用進(jìn)行修改”。在存儲(chǔ)之前單擊“預(yù)覽”按鈕可以對(duì)設(shè)計(jì)的表單進(jìn)行預(yù)覽,最后單擊“完成”按鈕。圖6-6選擇保存表單的方式 在通過回答表單向?qū)У膯栴}所生成的表單中,含有一組標(biāo)準(zhǔn)的記錄定位按鈕,這組按鈕可用以在表單中顯示不同的記錄(第一個(gè)、前一個(gè)、下一個(gè)、最后一個(gè))、編輯記錄、添加記錄、刪除記錄和查找記錄等,見圖6-7。圖6-7利用表單向?qū)гO(shè)計(jì)的表單

2.快速生成表單 本小節(jié)仍以學(xué)生成績(jī)管理系統(tǒng)中的學(xué)生成績(jī)表xscj為例(見表6.1),介紹使用快速生成表單方法創(chuàng)建表單的過程。 (1)

選擇“文件”菜單中的“新建”菜單項(xiàng),彈出“新建”對(duì)話框。 (2)

在“新建”對(duì)話框中,選擇“表單”單選按鈕并單擊“新建表單”按鈕,進(jìn)入表單設(shè)計(jì)器。 (3)

選擇“表單”/“快速表單”菜單項(xiàng),彈出表單生成器(如圖6-8所示)。 (4)

在表單生成器中選取數(shù)據(jù)源C:\vfplx\xscj.dbf,并選取該表的全部字段;然后,單擊“確定”按鈕即可生成一個(gè)新表單。 新生成表單的界面類似于圖6-7中所示的表單。圖6-8表單生成器 3.一對(duì)多表單向?qū)? 本節(jié)在根據(jù)學(xué)生成績(jī)表xscj.dbf和學(xué)生表xs.dbf兩張表,用一對(duì)多表單向?qū)韯?chuàng)建表單。這兩張表通過字段“xh”建立關(guān)聯(lián)。 學(xué)生表xs.dbf的數(shù)據(jù)(庫結(jié)構(gòu))如表6.2所示,學(xué)生表xs.dbf的記錄數(shù)據(jù)內(nèi)容如圖6-9所示。表6.2學(xué)生表xs.dbf的庫結(jié)構(gòu)圖6-9學(xué)生表記錄內(nèi)容 學(xué)生成績(jī)表xscj.dbf的表結(jié)構(gòu)見表6.1,數(shù)據(jù)內(nèi)容如圖6-10所示。圖6-10學(xué)生成績(jī)表記錄內(nèi)容 使用一對(duì)多表單向?qū)У牟僮鞑襟E如下: (1)

選擇“文件”/“新建”,彈出“新建”對(duì)話框。 (2)

在“新建”對(duì)話框中,選中“表單”單選按鈕,單擊“向?qū)А卑粹o,打開“向?qū)нx取”對(duì)話框,在其中選取“一對(duì)多表單向?qū)А保ㄒ妶D6-11)并單擊“確定”按鈕。 (3)

在“一對(duì)多表單向?qū)А敝?,首先指定一個(gè)表作為一對(duì)多表單的父表(本例為學(xué)生表xs.dbf),然后進(jìn)行字段選?。ㄒ妶D6-12),接著單擊“下一步”按鈕。圖6-11向?qū)нx取圖6-12指定父表并選取字段 (4)

在“一對(duì)多表單向?qū)А敝校付ㄒ粋€(gè)表作為一對(duì)多表單中的子表(本例為學(xué)生成績(jī)表xscj.dbf),然后選取所需字段并單擊“下一步”按鈕。 (5)

在圖6-13所示的“一對(duì)多表單”向?qū)е?,建立兩個(gè)表的關(guān)聯(lián)關(guān)系,VisualFoxpro默認(rèn)設(shè)置是以兩個(gè)表中字段名相同的字段建立關(guān)聯(lián)。在本表單中,學(xué)生表和學(xué)生成績(jī)表關(guān)聯(lián)字段為“xh”學(xué)號(hào)。 (6)

在“一對(duì)多表單”向?qū)е?,選擇表單樣式和按鈕類型。 (7)

在“一對(duì)多表單”向?qū)е?,選擇記錄排序所依據(jù)的字段和記錄的排序方式,最多可選取三個(gè)字段。選定以“xh”字段的升序排序。圖6-13建立表之間的關(guān)聯(lián)關(guān)系 (8)

在“一對(duì)多表單向?qū)А敝羞x擇保存表單的方式,存儲(chǔ)之前單擊“預(yù)覽”按鈕進(jìn)行預(yù)覽。最后單擊“完成”按鈕。本例完成的一對(duì)多表單如圖6-14所示。圖6-14一對(duì)多表單運(yùn)行情況 在圖6-14所示的表單中,上半部分對(duì)學(xué)生表記錄進(jìn)行維護(hù),下半部分對(duì)學(xué)生成績(jī)表記錄進(jìn)行維護(hù),表單中顯示的是同一個(gè)學(xué)生的信息,即以“xh”學(xué)號(hào)字段為關(guān)聯(lián)字段,學(xué)生表和成績(jī)表的內(nèi)容保持同步。這里要注意,必須以學(xué)生表做為父表,成績(jī)表做為子表,兩者不能前后顛倒,否則顯示的內(nèi)容不全。 之所以要提出上述要求的原因是在學(xué)生表中每個(gè)學(xué)生單獨(dú)生成一條記錄,而在成績(jī)表中同一個(gè)學(xué)生在一學(xué)期中可能有多門課程,即同一個(gè)學(xué)生會(huì)有多條記錄來記載多門課程的成績(jī)情況。學(xué)生表中的“xh”學(xué)號(hào)字段與成績(jī)表中的“xh”學(xué)號(hào)字段建立關(guān)聯(lián),但兩者的關(guān)系是1:N(一對(duì)多)的關(guān)系。

6.1.2使用表單設(shè)計(jì)器創(chuàng)建表單 1.建立表單 要新建立一個(gè)表單,可以通過以下幾種方法來完成: (1)

選擇“文件”下拉菜單的“新建”按鈕。 (2)

選擇主窗口工具欄中的“新建”命令按鈕。 (3)

打開“項(xiàng)目管理器”,選擇“文檔”/“表單”,點(diǎn)擊“新建”按鈕。 (4)

打開“命令窗口”,輸入窗體創(chuàng)建命令CreateForm[<表單名>]。 通常在創(chuàng)建一個(gè)表單時(shí),表單設(shè)計(jì)窗口的界面由四個(gè)窗口組成,這四個(gè)窗口分別是表單設(shè)計(jì)器、表單控件、布局和調(diào)色板(見圖6-15)。圖6-15表單設(shè)計(jì)界面 通過在表單中添加功能強(qiáng)大、豐富多彩的控件,不用或只用少量代碼就能夠得到賞心悅目的用戶界面。設(shè)計(jì)時(shí),只要在“表單控件”工具欄中選擇控件,然后將其拖放至表單設(shè)計(jì)器中合適的位置就可以把該控件對(duì)象添加到表單上。這一過程充分體現(xiàn)了面向?qū)ο缶幊碳夹g(shù)的靈活性,也反映了可視化編程技術(shù)的強(qiáng)大能力。 2.使用工具欄 設(shè)計(jì)表單時(shí)要使用“表單控件”工具欄所提供的控件,“表單控件”工具欄如圖6-16所示。在表6.3中詳細(xì)介紹“表單控件”工具欄上各控件的具體功能。圖6-16“表單控件”工具欄表6.3“表單控件”工具欄上的控件表略 “表單設(shè)計(jì)器”工具欄如圖6-17所示。在表6.4中顯示了“表單設(shè)計(jì)器”工具欄各控件的功能。圖6-17“表單設(shè)計(jì)器”工具欄表6.4“表單設(shè)計(jì)器”工具欄上的控件6.2容器和控件 VFP把所有的控件分為容器和控件兩大類型。容器類控件是能夠包含其他控件的控件。如“命令按鈕組”(CommandGroup)可以包含“命令按鈕”(CommandButton),所以“命令按鈕組”是容器類控件。一般的控件不能包含其他控件。VFP中的容器又分為表單容器(含表單集容器)和基容器兩種。表6.5顯示了表單容器和其包含的不同對(duì)象。表6.6顯示了基容器和其包含的不同對(duì)象。表6.5表單容器及其包含的對(duì)象表6.6基容器及其包含的對(duì)象 6.2.1容器層次中引用(訪問)對(duì)象 1.絕對(duì)引用 如圖6-18所示,F(xiàn)ormSet1是一個(gè)表單集對(duì)象,F(xiàn)orm1是包含在FormSet1中的一個(gè)表單對(duì)象,Text1和Group1則是包含在Form1中的文本框和選項(xiàng)按鈕組的對(duì)象,Opt1和Opt2又是包含在Group1中的選項(xiàng)按鈕對(duì)象。其中,F(xiàn)ormSet1、Form1和Group1叫做容器對(duì)象,而Text1和Opt1、Opt2叫做控件對(duì)象。絕對(duì)引用表單集對(duì)象中的某個(gè)控件時(shí),必須逐層指出各容器控件名和所引用控件的名如:

用絕對(duì)引用的方式來引用Text1對(duì)象:Formset1.Form1.Txt1 用絕對(duì)引用的方式來引用Opt2對(duì)象:Formset1.Form1.Group1.Opt2圖6-18對(duì)象在表單容器中的層次關(guān)系 2.相對(duì)引用 相對(duì)引用某個(gè)對(duì)象時(shí),應(yīng)該明確目標(biāo)對(duì)象相對(duì)于當(dāng)前對(duì)象的位置。表6.7是在容器層次中引用對(duì)象時(shí)的關(guān)鍵字和引用關(guān)系。表6.7關(guān)鍵字和引用關(guān)系 若在對(duì)象Txt1中要引用對(duì)象Group1,則可以使用以下語句: This.Parent.Group1 其中,This代表當(dāng)前對(duì)象Txt1文本框,Thisform和This.Parent指表單對(duì)象Form1 同樣,若當(dāng)前對(duì)象為選項(xiàng)框Opt1,要引用對(duì)象Txt1,則可以使用以下語句: This.Parent.Parent.Txt1 因?yàn)?,Opt1包含于容器Group1中,而Group1包含于對(duì)象Form1中,故相對(duì)于Opt1的Form1為This.Parent.Parent。 6.2.2設(shè)置屬性 在程序設(shè)計(jì)的編程階段或運(yùn)行階段均可以設(shè)置對(duì)象的屬性。對(duì)象的屬性可用命令方式設(shè)置,設(shè)置屬性命令的語法格式為:對(duì)象.屬性=值設(shè)置對(duì)象時(shí),要根據(jù)屬性設(shè)置的不同位置選擇對(duì)象的絕對(duì)引用或相對(duì)引用方式。例如,要設(shè)置Opt2選項(xiàng)為不可見,可用以下命令: Thisformset.Form1.Group1.Opt2.Visible=.F. 若要設(shè)置同一個(gè)對(duì)象的多個(gè)屬性,可采用With……….Endwith結(jié)構(gòu)。如:

WithFormset1.Form1.Txt1 &&對(duì)Txt1文本框進(jìn)行設(shè)置 .visible=.T. &&使Txt1文本框可視 .enabled=.T. &&使Txt1文本框可用 .backcolor=RGB(255,0,0) &&背景顏色為紅色 .alignment=2 &&文字對(duì)齊方式為居中 endwith 6.2.3調(diào)用方法 對(duì)象一旦建立之后,就可以在應(yīng)用程序的任何一處調(diào)用此對(duì)象的方法。調(diào)用對(duì)象方法的語法是: 對(duì)象的絕對(duì)位置引用或相對(duì)位置引用.方法名稱 調(diào)用時(shí),應(yīng)根據(jù)屬性設(shè)置的不同位置選擇對(duì)象的絕對(duì)引用或相對(duì)引用。例如:要調(diào)用Show方法來顯示表單,可用: Formset1.Form1.show 如果在調(diào)用方法時(shí),需要傳遞參數(shù),應(yīng)該將參數(shù)用圓括號(hào)括起,并置于方法名稱后面。若調(diào)用方法后有返回值,那么,即使沒有參數(shù)傳遞,在方法名稱之后也要加上圓括號(hào)。如 This.Move(100,50) &&給方法傳遞參數(shù) This.Caption=Thisform.Getnewcaption()6.3數(shù)據(jù)環(huán)境 6.3.1設(shè)計(jì)數(shù)據(jù)環(huán)境 數(shù)據(jù)環(huán)境定義了表單或報(bào)表使用的數(shù)據(jù)源,包括表、視圖和關(guān)系。數(shù)據(jù)環(huán)境與表單或報(bào)表一起保存并可使用數(shù)據(jù)環(huán)境設(shè)計(jì)器進(jìn)行修改。 定義表單或報(bào)表的數(shù)據(jù)環(huán)境之后,只要打開或運(yùn)行該文件表單或報(bào)表文件,VisualFoxPro就會(huì)自動(dòng)打開它的表或視圖,在關(guān)閉或釋放該文件時(shí)也會(huì)自動(dòng)關(guān)閉該表或視圖。 對(duì)于表單或表單控件,VisualFoxPro把“數(shù)據(jù)環(huán)境”中的全部字段列在“屬性”窗口中,構(gòu)成ContronlSource屬性列表。 打開“表單設(shè)計(jì)器”后,可用以下方法打開數(shù)據(jù)環(huán)境設(shè)計(jì)器: (1)

選取“顯示”/“數(shù)據(jù)環(huán)境”; (2)

打開表單后右擊,并從彈出的快捷菜單中選擇“數(shù)據(jù)環(huán)境”。 這兩種方法實(shí)質(zhì)上完成的是同一個(gè)FoxPro命令。選擇“數(shù)據(jù)環(huán)境”之后,系統(tǒng)將顯示圖6-19所示的對(duì)話框。圖6-19數(shù)據(jù)環(huán)境設(shè)計(jì)器 用鼠標(biāo)單擊“數(shù)據(jù)環(huán)境設(shè)計(jì)器”窗口可彈出一個(gè)菜單。表6.8給出了這個(gè)菜單中常用命令的意義。表6.8“數(shù)據(jù)環(huán)境設(shè)計(jì)器”彈出菜單中常用命令的意義 注意,在該彈出菜單中,“添加”和“移去”命令不會(huì)同時(shí)出現(xiàn)。 在單擊“數(shù)據(jù)環(huán)境設(shè)計(jì)器”窗口彈出的菜單中,除了表6.8所列的命令之外,還有“屬性”和“代碼”命令。這兩個(gè)命令可分別打開用以處理數(shù)據(jù)環(huán)境對(duì)象的數(shù)據(jù)“屬性”窗口和“代碼”窗口。常用的數(shù)據(jù)環(huán)境屬性見表6.9。表6.9“數(shù)據(jù)環(huán)境”常用屬性 6.3.2設(shè)置關(guān)系 關(guān)系是表與表之間的一種鏈接。通過建立表之間的鏈接,不僅可以訪問當(dāng)前選定表中的數(shù)據(jù),而且還可以訪問其他表中的數(shù)據(jù)。這種鏈接實(shí)際上是一種連接條件。這里只介紹為數(shù)據(jù)環(huán)境設(shè)置關(guān)系的方法。 在數(shù)據(jù)環(huán)境設(shè)計(jì)器中的表如果具有在數(shù)據(jù)庫中設(shè)置的永久關(guān)系,這些關(guān)系就會(huì)自動(dòng)地添加到數(shù)據(jù)環(huán)境中。如果表中沒有永久關(guān)系,可以在數(shù)據(jù)環(huán)境設(shè)計(jì)器中設(shè)置這些關(guān)系。

在數(shù)據(jù)環(huán)境設(shè)計(jì)器中設(shè)置關(guān)系時(shí)可采用直觀的拖動(dòng)方式,即將字段從主表拖動(dòng)到相關(guān)表中相匹配的索引標(biāo)識(shí)上;也可以將字段直接從主表拖動(dòng)到相關(guān)表中的字段上。如果相關(guān)表中沒有與之對(duì)應(yīng)的索引標(biāo)識(shí),系統(tǒng)將提示是否創(chuàng)建該索引標(biāo)識(shí)。在數(shù)據(jù)環(huán)境設(shè)計(jì)器中以“xh”學(xué)號(hào)字段建立了一個(gè)關(guān)系之后,在表之間將有一條連線指出這個(gè)關(guān)系,見圖6-20。圖6-20設(shè)置關(guān)系 在數(shù)據(jù)環(huán)境中將“學(xué)生表”和“學(xué)生成績(jī)表”分別選中,直接拖到表單中形成表格,表格的大小可以進(jìn)行適當(dāng)?shù)耐戏耪{(diào)整,表格中所有的數(shù)據(jù)源設(shè)置均采用系統(tǒng)缺省設(shè)置,其運(yùn)行結(jié)果使兩表狀態(tài)信息保持一致。鼠標(biāo)單擊學(xué)生表中任意一名學(xué)生,在學(xué)生成績(jī)表中就會(huì)顯示該學(xué)生的所有單科課成績(jī)內(nèi)容,見圖6-21所示。圖6-21利用數(shù)據(jù)環(huán)境生成的表 要編輯關(guān)系的屬性,應(yīng)先選擇該關(guān)系(單擊線條即可),然后用鼠標(biāo)右擊彈出快捷菜單,選擇“屬性”,使“屬性”對(duì)話框彈出。這時(shí)便可以進(jìn)行屬性設(shè)置。 關(guān)系的屬性值對(duì)應(yīng)于SETRELATION和SETSKIP命令中的子句。其中,屬性RelationalExpr的默認(rèn)值被設(shè)置為主表中主關(guān)鍵字段的字段名。如果相關(guān)表以表達(dá)式作為索引,就必須將其RelationalExpr屬性設(shè)置為這個(gè)表達(dá)式。如果關(guān)系不是一對(duì)多關(guān)系,則必須將屬性O(shè)neToMany設(shè)置為“假”。這相當(dāng)于使用SETRELATION命令時(shí)不發(fā)出SETSKIP命令。

如果關(guān)系是一對(duì)多關(guān)系,必須將關(guān)系的OneToMany屬性設(shè)置為“真”,相當(dāng)于使用SETRELATION命令時(shí),同時(shí)發(fā)出SETSKIP命令。瀏覽父表時(shí),在瀏覽完表中所有相關(guān)記錄之前,記錄指針一直停留在同一記錄上。6.4屬性窗口 設(shè)計(jì)表單時(shí)一般要使用“屬性”窗口。例如,設(shè)計(jì)表單的整體布局時(shí)可在“屬性”窗口設(shè)置相關(guān)的屬性;執(zhí)行用戶指定的操作時(shí)可在“屬性”窗口里選中對(duì)應(yīng)的事件,然后編寫方法代碼??傊凇皩傩浴贝翱谥锌梢酝瓿杀韱卧O(shè)計(jì)的絕大部分工作。 要顯示“屬性”窗口,可以在系統(tǒng)菜單上選擇“顯示/屬性”,或在“表單設(shè)計(jì)器”或“數(shù)據(jù)環(huán)境設(shè)計(jì)器”中單擊鼠標(biāo)右鍵,并在快捷菜單中選擇“屬性”。圖6-22顯示了表單的“屬性”窗口。 根據(jù)所選的對(duì)象的不同,“屬性”窗口顯示的內(nèi)容也不盡相同?!皩傩浴贝翱诳偸悄J(rèn)顯示與當(dāng)前選定的對(duì)象,如表單、數(shù)據(jù)環(huán)境、表、關(guān)系或控件有關(guān)的屬性、事件和方法程序列表。在設(shè)計(jì)中或運(yùn)行中都可以對(duì)屬性進(jìn)行設(shè)置或更改。當(dāng)選擇的對(duì)象多于一個(gè)時(shí),“屬性”窗口顯示選定對(duì)象共有的屬性。 圖6-22顯示的“屬性”窗口頂部有一個(gè)對(duì)象下拉列表框,里面包含當(dāng)前表單及在表單上的所有對(duì)象的名稱。可用這個(gè)下拉列表框選擇對(duì)應(yīng)的對(duì)象。根據(jù)所選對(duì)象的不同,屬性窗口顯示的內(nèi)容就不同。例如圖6-22顯示的是表單Form1的“屬性”窗口。圖6-22表單的“屬性”窗口 在“屬性”窗口對(duì)象列表框的下面是一個(gè)頁框選項(xiàng)卡,其中共有5個(gè)選項(xiàng)頁,分別是“全部”、“數(shù)據(jù)”、“方法程序”、“布局”和“其他”,選中不同的選項(xiàng)頁窗口顯示的內(nèi)容也不同。各個(gè)選項(xiàng)頁的具體含義如下: 全部:顯示對(duì)象所有屬性的當(dāng)前設(shè)置以及事件和方法程序的名稱; 數(shù)據(jù):顯示有關(guān)對(duì)象如何顯示或怎樣操作數(shù)據(jù)的屬性; 方法程序:顯示方法程序和事件; 布局:顯示所有的布局屬性; 其他:顯示其他特殊屬性,包括用戶自定義屬性。 有些屬性值是由用戶設(shè)定的一個(gè)值或一行文本,如設(shè)置Caption屬性時(shí),屬性設(shè)置框的右側(cè)會(huì)出現(xiàn)一個(gè)文本框,允許用戶在其中輸入一個(gè)值或一行文本。如果輸入的是一個(gè)字符串,不必使用雙引號(hào)把字符串括起來,只需輸入字符串內(nèi)容即可。有些屬性如Autocenter的設(shè)置值是預(yù)定義好的。設(shè)置該屬性時(shí),屬性設(shè)置框的右側(cè)出現(xiàn)一個(gè)下拉列表框,從中可選擇一個(gè)屬性值。 屬性設(shè)置框下面是屬性列表,里面列出了當(dāng)前對(duì)象所有的屬性、事件和方法的當(dāng)前默認(rèn)設(shè)置值。有些屬性值以“斜體”顯示,如圖6-22的“BaseClass”屬性,表示用戶不能更改此屬性值。有些屬性值為黑體,則表示屬性值已經(jīng)設(shè)置為新值。 雙擊某一個(gè)屬性可更改該屬性值。默認(rèn)情況下,事件或方法都以“[默認(rèn)過程]”顯示,如果以對(duì)事件或方法編寫了程序代碼,顯示內(nèi)容則為“[用戶自定義過程]”。雙擊某一事件或方法時(shí)可彈出一個(gè)代碼編輯框,在編輯框里就可以為事件或方法編寫程序代碼了。 在屬性列表中單擊鼠標(biāo)右鍵可彈出屬性的快捷菜單。使用這個(gè)快捷菜單能夠恢復(fù)屬性的初始值和打開當(dāng)前位置上的屬性、事件或方法的幫助信息。在屬性設(shè)置框里更改屬性值以后,新的屬性值都將在屬性列表里以黑體顯示,以區(qū)別其他未更改的屬性值。同時(shí)在表單或表單對(duì)象上將反映出屬性修改的結(jié)果,這一點(diǎn)充分體現(xiàn)了可視化編程的魅力。6.5添加新的屬性和方法 每個(gè)表單及表單上的每個(gè)控件都有許多屬性、事件和方法。一般情況下,這些屬性、事件和方法已經(jīng)能夠滿足設(shè)計(jì)用戶界面的要求。但是,為了滿足一些特殊的需要,有時(shí)會(huì)希望增加一些自己定義的變量或函數(shù)。VisualFoxPro允許為控件添加新屬性和新方法,添加屬性或方法的數(shù)量不限,并可以像其他原有屬性或方法一樣使用。要注意的是不能為控件添加事件,因?yàn)槭录强丶逃械膭?dòng)作,不能擴(kuò)充。

要往表單添加新屬性或新方法,首先必須打開表單設(shè)計(jì)器,然后選擇系統(tǒng)菜單上的“表單”/“新建屬性”或“表單”/“新建方法程序”,屏幕就會(huì)出現(xiàn)一個(gè)對(duì)話框;在這個(gè)對(duì)話框里就可以為表單添加新屬性或新方法。圖6-23所示的對(duì)話框中就顯示了為表單添加的一個(gè)新屬性Add。圖6-23添加新的屬性 添加屬性時(shí),在圖6-23所示對(duì)話框的“名稱”文本框里輸入新屬性的名稱,在說明框中可輸入對(duì)該的屬性注釋,注釋內(nèi)容可有可無。圖6-23中加入的是ADD屬性,這個(gè)屬性用于判斷表中記錄是否有新的添加操作。只要添加過記錄以后,表單內(nèi)所有過程中均可調(diào)用表單的新屬性ADD,屬性ADD將充當(dāng)表單中全局變量的角色。 選中“Access方法程序”,可以為新屬性添加一個(gè)Access方法。當(dāng)要查詢?cè)搶傩灾祷蛴言搶傩灾蒂x予一個(gè)變量時(shí),系統(tǒng)將自動(dòng)調(diào)用一個(gè)Access方法程序。按下“添加”按鈕就可以往表單里添加一個(gè)新屬性。在表單的“屬性”窗口的最底部可以看到新添加的屬性。

用戶自定義的函數(shù)可以作為新方法程序添加到表單內(nèi)。添加方法是,選擇系統(tǒng)菜單上的“表單”/“新建方法程序”,在彈出的“新建方法程序”對(duì)話框就可以添加新的方法。新添加的方法在屬性窗口里以“[默認(rèn)過程]”顯示,雙擊該方法名可打開一個(gè)代碼編輯框進(jìn)行程序設(shè)計(jì)。6.6單文檔界面與多文檔界面 VisualFoxPro創(chuàng)建的應(yīng)用程序可分為多文檔界面應(yīng)用程序與單文檔界面應(yīng)用程序兩類。多文檔界面(Multiple-documentinterface,MDI)指一個(gè)應(yīng)用程序?qū)嵗梢酝瑫r(shí)包含一個(gè)或多個(gè)文檔,它可以同時(shí)服務(wù)于一個(gè)用戶和一個(gè)或多個(gè)嵌入的容器。例如,VisualFoxPro本身基本上就是一個(gè)MDI應(yīng)用程序,帶有包含于VisualFoxPro主窗口中的“命令”窗口,除此之外還可以同時(shí)打開編輯窗口和設(shè)計(jì)器窗口等其他類型的窗口。

單文檔界面(Single-documentinterface,SDI)指的是應(yīng)用程序由一個(gè)或多個(gè)獨(dú)立的窗口組成,這些窗口均在Windows桌面上單獨(dú)顯示。MicrosoftExchange即是一個(gè)SDI應(yīng)用程序的例子,在該軟件中打開的每條消息均顯示在自己獨(dú)立的窗口中。 由單個(gè)窗口組成的應(yīng)用程序通常是一個(gè)SDI應(yīng)用程序,也有一些應(yīng)用程序綜合了SDI和MDI的特性。例如,VisualFoxPro將調(diào)試器顯示為一個(gè)SDI應(yīng)用程序,而它本身又包含了自己的MDI窗口。為了支持這兩種類型的界面,VisualFoxPro允許創(chuàng)建以下3種類型的表單:

(1)

子表單(ChildForm):子表單包含在另一個(gè)窗口里,主要用于創(chuàng)建MDI應(yīng)用程序的表單。子表單不能移動(dòng)到父表單(主表單)顯示范圍之外。當(dāng)子表單最小化時(shí),它將顯示在父表單的底部。若父表單最小化,則子表單也一同最小化。 (2)

浮動(dòng)表單(FloatingForm):屬于父表單(主表單)的一部分,但并不是包含在父表單里。浮動(dòng)表單可用于創(chuàng)建MDI應(yīng)用程序。與子表單不同的是,浮動(dòng)表單可以移動(dòng)到屏幕的任何位置,但不能在父窗口后臺(tái)移動(dòng)。若浮動(dòng)表單最小化,它將顯示在桌面的底部。若父表單最小化時(shí),則浮動(dòng)表單也一同最小化。 (3)

頂層表單(Top-levelForm):頂層表單和其他Windows應(yīng)用程序同級(jí),可出現(xiàn)在其前臺(tái)或后臺(tái),并且顯示在Windows任務(wù)欄里。 這3種表單中有關(guān)屬性的具體設(shè)置如表6.10所示。表6.10設(shè)置3種類型的表單6.7表單設(shè)計(jì)范例 表單不僅提供給用戶一個(gè)用于查看、輸入和操作數(shù)據(jù)的接口,而且還包括了一個(gè)能適應(yīng)用戶事件和系統(tǒng)事件的強(qiáng)有力的對(duì)象集。 VFP中,通常按以下步驟設(shè)計(jì)一個(gè)新的表單: (1)

設(shè)置表單屬性; (2)

添加適當(dāng)?shù)目丶? (3)

設(shè)置控件的屬性; (4)

編寫事件的代碼。 在前面的章節(jié)中我們介紹了建立和操作表單的基本方法和步驟,不過在實(shí)際應(yīng)用中通常會(huì)涉及到多個(gè)控件的使用和多種功能的操作。要掌握這些控件和功能的使用與操作,必須通過大量的實(shí)踐。本節(jié)將靈活應(yīng)用前面的介紹的知識(shí)并對(duì)這知識(shí)進(jìn)行總結(jié)。通過多種方法的綜合應(yīng)用,幫助讀者掌握一定的面向?qū)ο蟪绦蛟O(shè)計(jì)的技巧,同時(shí)也可以了解和體會(huì)一個(gè)連貫而完整的表單設(shè)計(jì)思路和設(shè)計(jì)過程。 在開始一個(gè)表單的設(shè)計(jì)時(shí),首先要進(jìn)行表單界面的設(shè)計(jì)。表單界面的設(shè)計(jì)可以按其使用目的分為兩大類:與表內(nèi)容有關(guān)的數(shù)據(jù)操作界面設(shè)計(jì)和與表內(nèi)容無關(guān)的對(duì)話界面設(shè)計(jì)。本節(jié)主要討論第一種類型,即,與表內(nèi)容有關(guān)的數(shù)據(jù)操作界面設(shè)計(jì),或稱表內(nèi)容的錄入界面設(shè)計(jì)。 表內(nèi)容錄入界面的外觀格式并沒有統(tǒng)一的規(guī)定,設(shè)計(jì)者可以根據(jù)需要和個(gè)人的喜好來確定。無論采用何種外觀,表內(nèi)容輸入界面都應(yīng)完成一些基本的功能操作,包括記錄數(shù)據(jù)錄入、記錄數(shù)據(jù)的前后翻動(dòng)、記錄數(shù)據(jù)的定位等。 表內(nèi)容輸入界面設(shè)計(jì)時(shí)主要應(yīng)該考慮數(shù)據(jù)源、顯示數(shù)據(jù)的格式和交互操作的方式等方面的問題。具體來講,應(yīng)該考慮: (1)

數(shù)據(jù)源:考慮涉及到哪幾個(gè)表、各表之間的關(guān)系、是否采用數(shù)據(jù)環(huán)境等問題; (2)

顯示數(shù)據(jù)的格式:選用何種格式布局、選用哪些控件對(duì)象等問題; (3)

交互操作的方式:用戶如何操作、選用哪些控件對(duì)象、事件觸發(fā)時(shí)事件代碼程序完成哪些操作、是否需要向表單中添加新的屬性和方法等問題。 下面,以一個(gè)單張表(學(xué)生成績(jī)表)的信息輸入界面設(shè)計(jì)為例,介紹采用不同的設(shè)計(jì)方法進(jìn)行設(shè)計(jì)的過程。 學(xué)生成績(jī)表的信息輸入界面要求有以下四個(gè)功能: (1)

除數(shù)據(jù)輸入外,學(xué)生成績(jī)表具有只讀瀏覽功能; (2)

可以隨時(shí)添加記錄; (3)

可以取消當(dāng)前的操作; (4)

可以隨時(shí)結(jié)束操作退出表單。 6.7.1設(shè)計(jì)方法一 1.確定界面效果 先進(jìn)行分析并勾畫出要設(shè)計(jì)的“學(xué)生成績(jī)表”的界面,接下來逐步完善直至最終實(shí)現(xiàn)它。我們要設(shè)計(jì)的“學(xué)生成績(jī)表”的界面如圖6-24所示。圖6-24學(xué)生成績(jī)輸入表單外觀 2.創(chuàng)建表單的界面布局 創(chuàng)建表單的界面布局的步驟如下: (1)

選用一種方法,創(chuàng)建一個(gè)新表單并進(jìn)入表單設(shè)計(jì)器; (2)建立數(shù)據(jù)環(huán)境。這張表單只涉及到一個(gè)“學(xué)生成績(jī)表”,只需將該表添加到數(shù)據(jù)環(huán)境中即可(見圖6-25)。利用數(shù)據(jù)環(huán)境可以省去對(duì)表的打開、關(guān)閉操作,向表單中添加的需要與數(shù)據(jù)源綁定的控件時(shí),也可以直接得到控件的數(shù)據(jù)源缺省設(shè)置。對(duì)于初學(xué)者而言,這樣做就可以在少代碼或不寫代碼的情況下完成表單的設(shè)計(jì)操作; (3)

添加數(shù)據(jù)顯示控件,因?yàn)樵摫韱沃饕帽砀駚盹@示信息,因此最簡(jiǎn)單的方法就是將數(shù)據(jù)環(huán)境中的“學(xué)生成績(jī)表”直接拖到表單中形成一個(gè)表格,見圖6-26所示。表格的位置、大小可以通過對(duì)該表格進(jìn)行適當(dāng)拖放操作來調(diào)整,表格中所有數(shù)據(jù)源設(shè)置均采用系統(tǒng)缺省設(shè)置。圖6-25添加數(shù)據(jù)環(huán)境圖6-26選中學(xué)生成績(jī)表拖放到表單中 (4)

添加交互式控件。在表單中有3個(gè)命令按鈕,使用“表單控件”工具欄向表單中添加3個(gè)命令按鈕(見圖6-27)。3個(gè)命令按鈕的位置及大小均可以進(jìn)行適當(dāng)?shù)耐戏耪{(diào)整或利用“布局”工具欄進(jìn)行對(duì)齊。圖6-27向表單添加3個(gè)命令按鈕 (5)

為表單設(shè)置新的標(biāo)題以覆蓋原有的缺省標(biāo)題,打開表單“屬性”窗口,置表單的Caption值為“成績(jī)表數(shù)據(jù)輸入”,并且分別將3個(gè)命令按鈕的“屬性”顯示框中Caption值設(shè)置為“添加”,“取消”,“退出”(見圖6-28)。圖6-28設(shè)置Commond3按鈕的標(biāo)題為“退出” 3.設(shè)置或添加表單中與操作有關(guān)的屬性 本表單要求具有對(duì)表中的記錄進(jìn)行添加操作的功能,而且可以取消這一添加操作。要實(shí)現(xiàn)這一功能有許多方法和技巧,這里介紹一種新建表單屬性的方法。 該表單要隨時(shí)確定是否有添加操作以及所添加記錄的記錄號(hào),以便在事件代碼中進(jìn)行判斷和相應(yīng)的處理。由于在每個(gè)事件中,變量若沒有特殊定義都只具有本地屬性(Local),在其他事件中不能調(diào)用本事件的變量。于是許多人想到用公用屬性(Public)來定義臨時(shí)變量,但公用屬性的變量可以在系統(tǒng)的任何一個(gè)模塊中使用,一旦使用不當(dāng),勢(shì)必將引起整個(gè)系統(tǒng)的混亂。 在此種情況下,我們選擇采用向表單添加新屬性的方法,即增添一個(gè)屬性變量,然后用這個(gè)屬性變量來充當(dāng)本表單內(nèi)全局變量的角色。這樣既可以在表單的所有事件中引用新添加的屬性變量,又不會(huì)造成系統(tǒng)混亂。 在“學(xué)生成績(jī)表”表單中新增加屬性的步驟如下: (1)

選取“表單”/“新建屬性”(見圖6-29),打開“新建屬性”對(duì)話框。 在“新建屬性”對(duì)話框中分別添加兩個(gè)新屬性:判斷是否添加新記錄的操作變量ADD(邏輯型,缺省的數(shù)據(jù)值為邏輯假)和新添加記錄的記錄號(hào)R(數(shù)值型),見圖6-30。圖6-29選擇添加屬性選項(xiàng)圖6-30新屬性添加 4.編制與操作有關(guān)的事件代碼1)

編制數(shù)據(jù)環(huán)境的事件過程代碼 本例要求實(shí)現(xiàn)刪除新添加新記錄的操作。在VFP中,刪除操作分為物理刪除和邏輯刪除兩種。如果只使用邏輯刪除命令,可能會(huì)在數(shù)據(jù)表中留下許多廢記錄,這不利于表的有效管理。因此,在我們?cè)O(shè)計(jì)的系統(tǒng)中最終要物理刪除這些廢記錄,要用命令Pack除去打了刪除標(biāo)記的記錄。由于VisualFoxpro是一個(gè)多用戶環(huán)境,而要使用Pack命令必須獨(dú)占表文件,也就是說在打開表文件時(shí)必須采用獨(dú)占方式。為此,我們?cè)跀?shù)據(jù)環(huán)境中打開表文件之前的事件(BeforeOpenTables事件)中設(shè)置表的打開方式,見圖6-31、圖6-32。圖6-31數(shù)據(jù)環(huán)境事件圖6-32數(shù)據(jù)環(huán)境事件過程代碼 2)編制表單的事件過程代碼 本例中要求除了添加記錄期間外,其他時(shí)間都只能以只讀方式瀏覽表內(nèi)容。實(shí)現(xiàn)時(shí),可在添加記錄期間將表格的Readonly屬性設(shè)置為“假”,其他時(shí)間設(shè)置為“真”。為了有效地控制輸入和刪除,還要將表格的AllowAddNew屬性設(shè)置為“假”,以防止用戶按下光標(biāo)鍵時(shí)自行添加記錄,將表格中的DeleteMark屬性設(shè)置為“假”,以防止用戶刪除記錄。所有上述屬性的設(shè)置都選擇在表單的Init事件中進(jìn)行(見圖6-33,圖6-34)。在Form1的初始化事件Init()中,我們還對(duì)對(duì)象Grid1的屬性做了初始化,并為新添加的屬性Add和R分別賦上初始值。圖6-33表單的初始化事件(Init)圖6-34表單的初始化(Init)事件代碼 3)控件的對(duì)應(yīng)事件編程 用戶的主要操作多數(shù)集中在控件對(duì)象中進(jìn)行。在本設(shè)計(jì)中,有3個(gè)控件“添加”、“取消”,“退出”,可用于接受用戶的觸發(fā)事件。 當(dāng)用戶單擊“添加”按鈕時(shí),應(yīng)實(shí)現(xiàn)記錄的添加操作,包括: (1)

將表格中Readonly屬性設(shè)置為“假”; (2)

向表中追加一個(gè)空記錄:Appendblank; 將表單屬性Add和R分別重新設(shè)置為“真”和Recno(); (1)

將輸入的焦點(diǎn)指向新添加的記錄的第一個(gè)字段上; (2)

刷新表單的數(shù)據(jù)(按新值顯示)。 對(duì)應(yīng)的事件過程代碼見圖6-35。圖6-35“添加”命令按鈕的Click事件過程代碼 當(dāng)用戶單擊“取消”按鈕時(shí),應(yīng)該實(shí)現(xiàn)刪除新添加記錄的操作,包括: (1)

根據(jù)表單屬性Add和R判斷是否為新添加的記錄,如果是則執(zhí)行刪除命令Delete將該記錄刪除; (2)

將表單屬性Add和R重新設(shè)置為.F.和0; (3)

判斷結(jié)束后,將表格中Readonly屬性設(shè)置為“真”; (4)

刷新表單數(shù)據(jù),使按新值顯示。 對(duì)應(yīng)的事件過程代碼見圖6-36所示。 當(dāng)用戶單擊“退出”按鈕時(shí),應(yīng)實(shí)現(xiàn)物理刪除記錄并做釋放表單的操作: (1)

執(zhí)行命令Pack; (2)

釋放表單。 對(duì)應(yīng)的事件過程代碼見圖6-37。圖6-36“取消”命令按鈕的Click事件過程代碼圖6-37“退出”命令按鈕的Click事件過程代碼 5.運(yùn)行及調(diào)試 設(shè)計(jì)結(jié)束后,將表單等存盤并開始運(yùn)行調(diào)試。 這個(gè)表單可在表單設(shè)計(jì)器中直接運(yùn)行(單擊常用工具欄中圖標(biāo)),也可以退出表單設(shè)計(jì)器,在VisualFoxpro的命令窗口中用命令DoForm“文件名”來運(yùn)行。在表單的運(yùn)行過程中反復(fù)測(cè)試每個(gè)命令按鈕,直至完成該表單的全部功能都能順利完成。 6.7.2設(shè)計(jì)方法二 1.確定界面效果 按照題目的要求并依照前面介紹的考慮要點(diǎn),經(jīng)過分析我們還可以勾畫出圖6-38所示的另一個(gè)“學(xué)生成績(jī)表”信息輸入表單。在本小節(jié)中,我們將設(shè)計(jì)實(shí)現(xiàn)這個(gè)表單。圖6-38學(xué)生成績(jī)表輸入界面 2.創(chuàng)建表單的界面布局 與上一小節(jié)中所設(shè)計(jì)的表單界面不同,本節(jié)要設(shè)計(jì)的表單界面中沒有使用表格,而是使用了多種控件來顯示信息。因此在本節(jié)中,表單界面設(shè)計(jì)的主要任務(wù)按要求加入不同的控件。具體設(shè)計(jì)步驟如下: (1)

任意選用一種方法,例如在“命令”窗口鍵入createformxssr4命令,進(jìn)入表單設(shè)計(jì)器。 (2)

按設(shè)計(jì)方法一中的介紹步驟添加數(shù)據(jù)環(huán)境。

(3)

添加數(shù)據(jù)顯示控件:添加這些控件比較簡(jiǎn)單的方法是直接選數(shù)據(jù)環(huán)境中“學(xué)生成績(jī)表”的對(duì)應(yīng)字段并拖放到表單中。如果位置及大小不合要求,可進(jìn)行適當(dāng)?shù)耐戏耪{(diào)整,見圖6-39。所有控件數(shù)據(jù)源都采用系統(tǒng)缺省設(shè)置,以課程名為例,其顯示控件自動(dòng)綁定數(shù)據(jù)源,見圖6-40所示。圖6-39數(shù)據(jù)環(huán)境中選定字段直接拖到表單中圖6-40課程名綁定控件數(shù)據(jù)源 (1)

添加交互操作控件。按圖6-38所示的位置,使用表單設(shè)計(jì)器中的“表單控件”工具欄向表單中添加5個(gè)命令按鈕。 (2)

設(shè)置表單或控件標(biāo)題。為表單、顯示信息的控件和命令按鈕設(shè)置新的標(biāo)題以覆蓋原有的缺省標(biāo)題。設(shè)置標(biāo)題的操作步驟與設(shè)計(jì)方法一中的相應(yīng)步驟相同。只是增加了設(shè)置標(biāo)題的字型屬性FontName和字號(hào)屬性FontSize的操作。 (6)修飾表單。在圖6-38中,我們看到5個(gè)命令按鈕被一個(gè)線框圍了起來。這個(gè)線框起到了一定的裝飾作用,同時(shí)對(duì)用戶操作也有一定的指導(dǎo)作用。使用表單設(shè)計(jì)器“表單控件”工具欄中的形狀控件Shape可以在表單中添加方框形狀(其屬性Curvature的值為0),方框的位置及大小可以進(jìn)行適當(dāng)?shù)耐戏耪{(diào)整(見圖6-41)。設(shè)計(jì)時(shí)有可能發(fā)現(xiàn)當(dāng)將方框套在5個(gè)命令按鈕上之后,有時(shí)就看不到5個(gè)命令按鈕了,這時(shí),只要選擇“格式”菜單中的“置后”選項(xiàng),將方框置于命令按鈕后方,就可以再次看到這5個(gè)命令按鈕。圖6-41向表單中添加方框形狀 為了美觀起見,在設(shè)計(jì)時(shí)可以為線框添加一些立體效果。線框的不同效果是通過把線框的BorderStyle屬性、BorderWidth屬性和SpecailEffect設(shè)置為不同的值來實(shí)現(xiàn)的。其中BorderStyle屬性指定線框的樣式,如實(shí)線、虛線等,BorderWidth屬性指定線框的寬度,SpecailEffect屬性指定其不同格式,如平面或0~3維。一般情況下,將BorderStyle屬性設(shè)置為1,BorderWidth屬性設(shè)置為1,SpecailEffect屬性設(shè)置為0~3維即可達(dá)到線框的立體效果(見圖6-42)。圖6-42設(shè)置線框的立體效果 3.設(shè)置或添加與操作有關(guān)的屬性 (1)

添加屬性。與設(shè)計(jì)方法一中相應(yīng)步驟相同,我們采用向表單中添加新屬性的方法將是否有添加操作的邏輯型屬性ADD和添加記錄的記錄號(hào)R(數(shù)值型)添加到表單中。新添加屬性的缺省值為邏輯型“假”,可以在屬性窗口中重新設(shè)置或在事件或方法過程代碼中重新設(shè)置這些屬性的值。 (2)

設(shè)置屬性。與設(shè)計(jì)方法一中相應(yīng)步驟相同,其他不變的屬性都采用系統(tǒng)的缺省設(shè)置值,而在表單運(yùn)行過程中要發(fā)生變化的屬性將在事件或方法過程代碼中設(shè)置。 4.編制與操作有關(guān)的事件過程代碼 1)編制數(shù)據(jù)環(huán)境的事件過程代碼 與設(shè)計(jì)方法一中的相應(yīng)步驟相同,選用數(shù)據(jù)環(huán)境中的BeforeOpenTables事件實(shí)現(xiàn)獨(dú)占方式打開表(見圖6-43)。圖6-43編制數(shù)據(jù)環(huán)境的事件代碼 2)編制表單的事件過程代碼 由于題目要求除了在添加記錄期間外都以只讀方式瀏覽表內(nèi)容,因此在實(shí)現(xiàn)時(shí),可以在添加記錄期間把表單中用于顯示數(shù)據(jù)控件的ReadOnly屬性設(shè)置為“假”,而其他時(shí)候設(shè)置為“真”。同時(shí),我們還要為新添加的表單屬性設(shè)置初值。這些設(shè)置都在表單的Init事件中實(shí)現(xiàn)(見圖6-44)。圖6-44編制表單初始化的Init事件 3)編制控件的事件過程代碼 用戶的主要操作大多集中在控件對(duì)象上。在本表單中共設(shè)計(jì)了5個(gè)命令按鈕,用于接受用戶的觸發(fā)事件。當(dāng)用戶單擊“添加”按鈕時(shí),應(yīng)該實(shí)現(xiàn)記錄的添加操作: (1)

將表單中用于顯示數(shù)據(jù)的文本框的ReadOnly屬性設(shè)置為“假”,并將“后翻”按鈕的Enable屬性為“假”,因?yàn)檫@時(shí)記錄指針已經(jīng)在最后一個(gè)記錄上了,應(yīng)禁止向后翻頁操作; (2)

向表中追加一個(gè)空記錄:APPENDBLANK; (3)

將表單屬性ADD和R重新設(shè)置為“真”和RECNO()。 (4)

將輸入焦點(diǎn)指向新添加的記錄的第一個(gè)字段上。 (5)

刷新表單的顯示內(nèi)容,使其按新值顯示。 對(duì)應(yīng)的事件過程代碼見圖6-45。圖6-45“添加”命令按鈕的Click事件代碼 當(dāng)用戶單擊“取消”按鈕時(shí),應(yīng)該實(shí)現(xiàn)刪除添加記錄的操作。對(duì)應(yīng)的事件過程代碼見圖6-46。圖6-46“取消”命令按鈕的Click事件代碼 當(dāng)用戶單擊“退出”按鈕時(shí),應(yīng)該實(shí)現(xiàn)記錄的物理刪除操作并釋放表單: (1)

退出前判斷一下當(dāng)前記錄的首字段是否無值,如果是,將其刪除,以確保表中信息的有效性; (2)

執(zhí)行PACK命令; (3)

釋放表單。 對(duì)應(yīng)的事件過程代碼見圖6-47。圖6-47“退出”命令按鈕的Click事件代碼 當(dāng)用戶單擊“前翻”按鈕時(shí),應(yīng)該實(shí)現(xiàn)記錄的向前翻頁操作: (1)

將表單中用于顯示數(shù)據(jù)的文本框的ReadOnly屬性設(shè)置為“真”,并將“后翻”按鈕的Enabled屬性設(shè)置為“真”,因?yàn)檫@時(shí)記錄指針已經(jīng)離開最后一個(gè)記錄,因此,允許向后翻頁操作; (2)

將表單屬性ADD和R重新設(shè)置為“假”和0; (3)

判斷記錄指針是否指到了表頭,如果不是,記錄指針向前跳一個(gè)記錄,否則,將當(dāng)前按鈕(“前翻”按鈕)的Enabled屬性設(shè)置為“假”; (4)

刷新表單的顯示內(nèi)容,使其按新值顯示。 對(duì)應(yīng)的事件過程代碼見圖6-48。圖6-48“前翻”命令按鈕Click事件代碼 當(dāng)用戶單擊“后翻”按鈕時(shí),應(yīng)該實(shí)現(xiàn)記錄的向后翻頁操作: (1)

將表單中用于顯示數(shù)據(jù)的文本框的ReadOnly屬性設(shè)置為“真”,并將“前翻”按鈕的Enable屬性設(shè)置為“真”,因?yàn)檫@時(shí)記錄指針已經(jīng)離開首記錄,因此,允許向前翻頁操作; (2)

將表單屬性ADD和R重新設(shè)置為“假”和0; (3)

判斷記錄指針是否指到了表底,如果不是,記錄指針向后跳一個(gè)記錄,否則,將當(dāng)前按鈕(“后翻”按鈕)的Enable屬性設(shè)置為“假”; (4)

刷新表單的顯示內(nèi)容,使其按新值顯示。 對(duì)應(yīng)的事件過程代碼見圖6-49。圖6-49“后翻”命令按鈕的Click事件代碼 5.運(yùn)行及調(diào)試 設(shè)計(jì)結(jié)束,將設(shè)計(jì)的表單存盤,然后分別進(jìn)行運(yùn)行、測(cè)試和調(diào)試等操作。運(yùn)行后表單可以逐項(xiàng)進(jìn)行測(cè)試,如前翻、后翻、添加、取消和退出。如果出現(xiàn)問題應(yīng)該進(jìn)行相應(yīng)的修改并繼續(xù)調(diào)試直到運(yùn)行成功。 6.7.3設(shè)計(jì)方法三 1.確定界面效果 按照題目的要求并依照前面介紹的考慮要點(diǎn),經(jīng)過分析設(shè)計(jì)可以勾畫出如圖6-50所示的第三種“學(xué)生成績(jī)表”信息輸入表單。圖6-50學(xué)生成績(jī)表輸入界面 2.創(chuàng)建表單的界面布局 按和設(shè)計(jì)方法二類似的方法創(chuàng)建一個(gè)新的表單,然后再添加數(shù)據(jù)環(huán)境和相應(yīng)的控件。在本設(shè)計(jì)中,表單的命令按鈕用命令按鈕組來實(shí)現(xiàn)。選中命令按鈕組后,單擊鼠標(biāo)右鍵選中“生成器”,在彈出的“命令字組生成器”窗口中即可設(shè)置按鈕類型和布局(見圖6-51,圖6-52)。圖6-51設(shè)置命令按鈕組圖6-52“命令組生成器” 很多用戶在應(yīng)用程序的操作過程中感到利用鼠標(biāo)來選取按鈕的方式不太方便。為此,可以為每個(gè)按鈕設(shè)置一個(gè)快捷鍵。所謂快捷鍵就是為每個(gè)按鈕指定一個(gè)字母,操作時(shí)使用鍵盤中Alt鍵再加上按鈕對(duì)應(yīng)的字母鍵就可以選中該按鈕。 設(shè)置快捷鍵的方法是在為控件設(shè)置標(biāo)題時(shí),在標(biāo)題的尾部加上“\<”符號(hào),再輸入一個(gè)字母即可。例如圖6-52中,“添加”命令按鈕的標(biāo)題內(nèi)容為“添加\<A”,則用戶按下Alt+A組合鍵和用鼠標(biāo)單擊“添加”命令按鈕兩者執(zhí)行相同的操作。另外,為了讓用戶知道如何使用快捷鍵,可在表單最后一行添加一個(gè)標(biāo)簽,用于快捷鍵操作提示。表單界面的設(shè)計(jì)效果如圖6-53所示。圖6-53完成設(shè)計(jì)后表單內(nèi)的控件 3.設(shè)置與操作有關(guān)的屬性 不變的屬性都采用系統(tǒng)的缺省設(shè)置值,而在表單運(yùn)行中要發(fā)生變化的屬性,將在事件或方法過程代碼中設(shè)置。 4.編制與操作有關(guān)的事件過程代碼 1)編制數(shù)據(jù)環(huán)境中的事件代碼 操作與前面介紹的相應(yīng)步驟相同,代碼見圖6-55。圖6-54數(shù)據(jù)環(huán)境中事件代碼 2)

編制表單的事件過程代碼 表單的Init事件用于處理最初在表單中顯示的數(shù)據(jù),由于最初表單顯示的內(nèi)容是表中首記錄數(shù)據(jù)。故應(yīng)該使命令按鈕“首記錄”和“前翻”按鈕不可選。表單Init事件的代碼見圖6-55。圖6-55表單的Init事件代碼

3)編制控件的事件過程 由于采用了中一個(gè)帶7個(gè)按鈕的命令按鈕組,因此,編制命令按鈕操作代碼時(shí),可選用命令按鈕組(Commandgroup1)的單擊Click事件,不必逐個(gè)編制每個(gè)命令按鈕的單擊事件代碼。命令按鈕組的單擊事件過程代碼如下: Docase Casethis.value=1 &&用戶單擊第一個(gè)命令按鈕(“添加”) Appendblank This.cmdfirst.enabled=.T. &&將組中“首記錄” 和“后翻”命令設(shè)置為可操作

This.cmdnext.enabled=.T. Thisform.txtxh.Setfocus &&學(xué)號(hào)字段獲得焦點(diǎn),即光標(biāo)位于該字段 Casethis.value=2 &&用戶單擊“刪除”命令按鈕 Delete If!eof() Skip Else &&記錄指針到文件尾,“尾記錄”和“后翻”命令不能操作 Thisform.cmdprevious.enabled=.F. Thisform.cmdlast.enabled=.F. Endif Casethis.value=3 &&用戶單擊“退出”命令按鈕 Ifempty(Thisform.txtxh.value) &&退出前發(fā)現(xiàn)學(xué)號(hào)字段為空,做邏輯刪除 Delete Endif Pack &&物理刪除已經(jīng)被邏輯刪除的全部記錄 Thisform.release() Casethis.value=4 &&用戶單擊“首記錄”命令按鈕 Gotop &&記錄指針指向首記錄 This.cmdfirst.enabled=.F. &&“首記錄”、“前翻”命令按鈕不可操作 This.cmdprevious.enabled=.F. This.cmdlast.enabled=.T. &&“尾記錄”、“后翻”命令可操作 This.cmdnext.enabled=.T. Casethis.value=5 &&用戶單擊“尾記錄”命令按鈕 Gobottom &&記錄指針指向尾記錄 This.cmdlast.enabled=.F. &&“尾記錄”、“后翻”命令不可操作 This.cmdnext.enabled=.F. This.cmdprevious.enabled=.T. &&“首記錄”、“前翻”命令按鈕可操作 This.cmdfirst.enabled=.T. Casethis.value=6and!bof() &&單擊“前翻”而且記錄指針沒有到文件頭 Skip–1 Ifbof()&&記錄指針到文件頭,“首記錄”、“前翻”命令按鈕不可操作 This.cmdprevious.enabled=.F. This.cmdfirst.enabled=.F. Endif This.cmdnext.enabled=.T. This.cmdlast.enabled=.T. CaseThis.value=7and!eof() &&單擊“后翻”而且記錄指針沒有到文件尾 Skip Ifeof() &&記錄指針到文件尾,“尾記錄”、“后翻”命令按鈕不可操作 This.cmdlast.enabled=.F. This.cmdnext.enabled=.F. Endif This.cmdprevious.enabled=.T. This.cmdfirst.enabled=.T. Endcase Thisform.refresh 考慮到實(shí)際記錄指針移動(dòng)操作中命令按鈕之間存在一定的制約關(guān)系,故在上述代碼中每次記錄指針移動(dòng)操作都詳細(xì)考慮了命令按鈕組中7個(gè)按鈕的可選或不可選性,充分體現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計(jì)邏輯思維嚴(yán)謹(jǐn)?shù)娘L(fēng)格。 5.運(yùn)行及調(diào)試 設(shè)計(jì)結(jié)束后將設(shè)計(jì)的表單存盤,然后分別進(jìn)行運(yùn)行、測(cè)試和調(diào)試等操作。表單的運(yùn)行情況見圖6-56,圖6-57所示。測(cè)試時(shí),可逐項(xiàng)進(jìn)行測(cè)試,如首記錄、尾記錄、前翻、后翻、添加、刪除和退出等。圖6-56單擊“首記錄”按鈕或按下Alt+F

組合鍵時(shí)的運(yùn)行情況圖6-57單擊“添加”按鈕或按下Alt+F

組合鍵時(shí)的運(yùn)行情況6.8類的設(shè)計(jì) 6.8.1類的創(chuàng)建 在VisualFoxpro中,創(chuàng)建類的具體步驟如下: (1)

打開項(xiàng)目管理器,選擇項(xiàng)目管理器中的“類”選項(xiàng)頁。 (2)

單擊項(xiàng)目管理器的“新建”按鈕,開始創(chuàng)建新的類。 (3)

在彈出“新建類”對(duì)話框中(見圖6-58),設(shè)置要?jiǎng)?chuàng)建的子類的名稱以及其父類來源,并設(shè)置存放該類的可視類庫文件名稱。我們?cè)谠O(shè)計(jì)一個(gè)新類時(shí),要以一個(gè)已存在的類作為基礎(chǔ),這個(gè)已存在的類就是父類,而我們自己創(chuàng)建的類就稱為子類。注意,子類可以繼承父類的所有功能并做新的擴(kuò)充。圖6-58“新建類”窗口

在圖6-58所示“新建類”對(duì)話框的“派生于”框中指定父類為CommandGroup(命令按鈕組),在“類名”框中指定新建類為“記錄移動(dòng)”,這個(gè)新建類保存在C:\vfplx\記錄移動(dòng).vcx文件中。 我們新建的這個(gè)“記錄移動(dòng)”類中要實(shí)現(xiàn)的功能為向前、向后移動(dòng)記錄指針或?qū)⒂涗浿羔樢苿?dòng)到首記錄、尾記錄。在具體程序設(shè)計(jì)中,可以直接引入創(chuàng)建的新類,使得移動(dòng)記錄操作的設(shè)計(jì)變的方便、快捷。 (4)單擊“確定”按鈕,彈出類設(shè)計(jì)器。在類設(shè)計(jì)器中,選中新建的“記錄移動(dòng)”類并用鼠標(biāo)右鍵單擊,彈出快捷菜單(如圖6-59所示)。在快捷菜單選中“屬性”命令,然后,在“屬性”窗口中,把“記錄移動(dòng)”類的Buttoncount屬性值修改為4(見圖6-60)。圖6-59類設(shè)計(jì)器窗口及快捷菜單圖6-60“記錄移動(dòng)”類的“屬性”窗口 (5)

修改類設(shè)計(jì)器中4個(gè)命令控件的控件名、標(biāo)題名,并按圖6-61所示調(diào)整它們的顯示布局。圖6-61調(diào)整控件布局 (1)

編寫控件的事件代碼。 “首記錄”按鈕的Click事件中完成的操作包括: §

將記錄指針移到第一條記錄; §

使“前翻”按鈕變灰失去作用,這是因?yàn)橛涗浿羔樚降谝粭l記錄后,在其前方已經(jīng)沒有前一條記錄; §

將“后一條記錄”按鈕設(shè)置有效,以解決以下操作問題:若在此之前先前按下“尾記錄”按鈕后并使“后翻”按鈕變灰,那么在按下“首記錄”按鈕后,應(yīng)該使“后一條記錄”按鈕恢復(fù)為有效狀態(tài)(Cmdnext.enabled=.T.)。

§

對(duì)整個(gè)表單對(duì)象或子對(duì)象進(jìn)行更新操作。 “首記錄”按鈕的Click事件代碼如下: gototop this.parent.cmdprevious.enable=.F. this.parent.cmdnext.enable=.T. thisform.refresh 在“前翻”按鈕的Click事件中應(yīng)完成以下操作: §

向前移動(dòng)一條記錄; §

判斷當(dāng)前記錄指針是否到了文件頭,若是,彈出一個(gè)對(duì)話框提示用戶原先記錄已經(jīng)是第一條記錄,而且使“前翻”按鈕變灰;若不是,使“前翻”按鈕有效,允許用戶繼續(xù)查看上一條記錄;

§

設(shè)置“后翻”按鈕有效; §

對(duì)整個(gè)表單對(duì)象或子對(duì)象進(jìn)行更新操作。 在“前翻”按鈕的Click事件代碼如下: skip–1 ifbof() =messagebox("已經(jīng)是第一個(gè)記錄!",48,"操作提示") this.enabled=.F. else this.enabled=.T. endif this.parent.cmdnext.enabled=.T. thisform.refresh “后翻”按鈕的Click事件代碼為: skip ifeof() =messagebox("已經(jīng)是最后一條記錄了",48,"操作提示") skip–1 this.enabled=.F. else this.enabled=.T. endif this.parent.cmdnext.enabled=.T. thisform.refresh “尾記錄”的按鈕的Click事件的代碼為: gobottom this.parent.cmdnext.enabled=.F. this.parent.cmdprevious.enabled=.T. thisform.refresh 這樣就創(chuàng)建了一個(gè)新類“記錄移動(dòng)”,下面介紹在表單設(shè)計(jì)中如何調(diào)用這個(gè)類。 6.8.2類的調(diào)用 新建表單,打開表單設(shè)計(jì)器并添加數(shù)據(jù)環(huán)境,把數(shù)據(jù)環(huán)境中表的相應(yīng)字段拖到表單中。打開“表單控件”工具欄,單擊圖標(biāo)后添加新建的記錄移動(dòng)類庫。當(dāng)?shù)诙未蜷_表單控件工具欄后,新建的類庫“記錄移動(dòng)”就顯示在屏幕上(見圖6-62)。單擊“記錄移動(dòng)”控件的圖標(biāo)并拖到表單中,就生成一個(gè)現(xiàn)成的單表記錄定位的表單(見圖6-63)。圖6-62添加新建的“記錄移動(dòng)”類圖6-63利用新建類創(chuàng)建的表單6.9典型的表單設(shè)計(jì) 6.9.1隨機(jī)抽獎(jiǎng)程序 在電視中我們??吹接?jì)算機(jī)隨機(jī)抽獎(jiǎng)活動(dòng),主持人在電腦鍵盤上按下一個(gè)鍵,屏幕中出現(xiàn)一串滾動(dòng)的隨機(jī)數(shù)字,再按下一個(gè)鍵屏幕中就出現(xiàn)了一組激動(dòng)人心的幸運(yùn)數(shù)字。接下來就產(chǎn)生一個(gè)新的幸運(yùn)星……。下面我們以隨機(jī)抽獎(jiǎng)程序?yàn)槔榻B典型表單的設(shè)計(jì)。 隨機(jī)抽獎(jiǎng)程序最終要完成設(shè)計(jì)的操作界面如圖6-64所示。圖6-64計(jì)算機(jī)隨機(jī)抽獎(jiǎng)程序 隨機(jī)抽獎(jiǎng)程序抽出的中獎(jiǎng)號(hào)碼為5位(0~9)阿拉伯?dāng)?shù)字。在程序執(zhí)行時(shí)的初始界面中按下“開始”按鈕后,5個(gè)文本框中隨機(jī)滾動(dòng)0~9共十個(gè)阿拉伯?dāng)?shù)字,按下鍵盤中的空格鍵產(chǎn)生第一位幸運(yùn)數(shù)字,后4個(gè)文本框中仍然隨機(jī)滾動(dòng)數(shù)字,再按下鍵盤中的空格鍵就可以產(chǎn)生第二位幸運(yùn)數(shù)字,后3個(gè)文本框仍然隨機(jī)滾動(dòng)數(shù)字,依次操作下去……,直到產(chǎn)生最后一個(gè)幸運(yùn)數(shù)字,并在屏幕中醒目顯示該組幸運(yùn)數(shù)字。

1.表單的設(shè)計(jì) 在我們要設(shè)計(jì)的表單中使用以下控件對(duì)象:使用5個(gè)文本框text1、text2、……text5來顯示數(shù)字;使用2個(gè)標(biāo)簽lable1和lable2來提示操作方法;使用2個(gè)命令按鈕command1和command2和1個(gè)計(jì)時(shí)器對(duì)象timer1。 2.對(duì)象的屬性、方法和事件設(shè)置 在設(shè)計(jì)或運(yùn)行時(shí),將表單的標(biāo)題屬性caption設(shè)置為“祝您中獎(jiǎng)”并且將表單的最大化屬性maxbutton和最小化屬性minbutton設(shè)為“假”,2個(gè)命令按鈕的標(biāo)題屬性設(shè)置為“開始”和“退出”,將text1和text5等5個(gè)文本框的顯示字體顏色為紅色,這樣使得演示的數(shù)字格外醒目。 在表單中新鍵5個(gè)屬性,屬性名稱分別為score1,score2,score3,score4,score5作為Public變量存儲(chǔ)產(chǎn)生的5個(gè)數(shù)字,它的作用域貫穿于本應(yīng)用程序的所有事件或過程。 在表單中新建5個(gè)ROLL過程并分別命名為ROLL1(),ROLL2(),ROLL3(),ROLL4(),ROLL5()。ROLL()過程通過隨機(jī)函數(shù)rand使文本框中的數(shù)字隨機(jī)動(dòng)態(tài)滾動(dòng),等待用戶鍵入“空格鍵”后產(chǎn)生一個(gè)幸運(yùn)數(shù)字并且將該數(shù)字賦值給新建的屬性score。 隨機(jī)函數(shù)rand的使用格式為:rand(<數(shù)值表達(dá)式>)。該函數(shù)返回一個(gè)0~1.0之間的隨機(jī)數(shù)。如果<數(shù)值表達(dá)式>是個(gè)負(fù)數(shù),由系統(tǒng)時(shí)鐘產(chǎn)生一個(gè)隨機(jī)“種子”。為了獲得真正的隨機(jī)序列,可以在使用該函數(shù)之前,先執(zhí)行語句:=rand(-1)作為種子隨機(jī)數(shù)產(chǎn)生器。另外,在ROLL()過程中使用text(i).value=int(10*rand()),在文本框中顯示數(shù)字0~9。當(dāng)用戶鍵入“空格鍵”(空格鍵的ASCII碼值為32),則產(chǎn)生一個(gè)幸運(yùn)數(shù)字,退出當(dāng)前的過程。 ROLL1()過程的代碼如圖6-65所示,ROLL2()~ROLL4()過程的代碼與之類似。圖6-65表單中的ROLL1()過程代碼 最后一個(gè)幸運(yùn)數(shù)字由ROLL5()過程產(chǎn)生。在ROLL5()過程中還要把計(jì)時(shí)器的Interval間隔時(shí)間設(shè)置為0,將Score1~Score5的數(shù)值轉(zhuǎn)化成字符并組成一個(gè)字符串作為一組幸運(yùn)數(shù)字,然后通過Messagebox消息框?qū)⑦@組數(shù)字顯示給用戶并向他(她)表示祝賀!ROLL5()過程的代碼如圖6-66所示。圖6-66表單中的ROLL5()過程代碼 為了使表單執(zhí)行過程中文本框內(nèi)數(shù)字能夠快速顯示而不產(chǎn)生視覺上的停頓感,我們將計(jì)時(shí)器的Interval屬性設(shè)置為40(0.04秒),即每間隔0.04秒系統(tǒng)就會(huì)自動(dòng)執(zhí)行Timer()事件,在Timer()事件中順序執(zhí)行Roll1~Roll5五個(gè)過程,見圖6-67。圖6-67計(jì)時(shí)器的Timer事件 “開始”命令按鈕Comand1和“結(jié)束”命令按鈕Command2分別用于開始和結(jié)束抽獎(jiǎng),對(duì)應(yīng)的鼠標(biāo)單擊事件如下: “開始”命令按鈕的單擊事件代碼: erval=40&&設(shè)置計(jì)時(shí)器的時(shí)間間隔為0.04秒 “退出”命令按鈕的單擊事件代碼: ifmessagebox(“你是否退出幸運(yùn)大派送!”,4+32,“信息窗口”)=6 thisform.release else return endif &&在退出之前詢問用戶是否真正退出,若不是,則繼續(xù)運(yùn)行,否則退出系統(tǒng) 抽獎(jiǎng)結(jié)束后,用幸運(yùn)號(hào)碼窗口顯示抽出的數(shù)字,見圖6-68。圖6-68產(chǎn)生幸運(yùn)號(hào)碼窗口 6.9.2單張表的查詢 1.表單的設(shè)計(jì) 本例中設(shè)計(jì)一個(gè)對(duì)學(xué)生成績(jī)表c:\vfplx\xscj.dbf的記錄進(jìn)行查詢的操作,查詢窗口界面的設(shè)計(jì)如圖6-69所示。在表單設(shè)計(jì)中共使用了4個(gè)標(biāo)簽、2個(gè)文本框、1個(gè)列表框、1個(gè)表格等對(duì)象。 運(yùn)行時(shí),在查詢窗口左上角的文本框中輸入學(xué)生成績(jī)表的表名(c:\vfplx\xscj.dbf),應(yīng)用程序在左下角的列表框中自動(dòng)顯示全部字段;輸入查詢表達(dá)式后(例如,輸入“cj>80”查詢成績(jī)表中單課成績(jī)大于80分的學(xué)生成績(jī)),在右下角的Grid表格中顯示滿足查詢條件的所有記錄,見圖6-70所示。圖6-69表查詢窗口界面圖6-70查詢窗口實(shí)際運(yùn)行效果 2.事件過程代碼 表單的Init事件過程代碼主要用于控制程序執(zhí)行后表單的初始化界面。在初始化界面中,先顯示列表框、列表框的標(biāo)題,表格、表格的標(biāo)題則不顯示,如圖6-71所示。Init事件的過程代碼如圖6-72所示。圖6-71運(yùn)行時(shí)表查詢窗口的初始化界面圖6-72表單的Init事件代碼 文本框text1的Valid(驗(yàn)證)事件用于對(duì)用戶輸入的表名進(jìn)行自動(dòng)判斷,若該表存在則自動(dòng)顯示該表的所有字段名,否則不允許退出操作直到輸入正確的表名稱為止。 Valid事件代碼為: tablename=alltrim(this.value)&&取Text1的文本內(nèi)容賦值給全局變量tablename iffile("&tablename")&&判斷該文件是否存在 use(tablename) withthisform .label3.visible=.t. &&設(shè)置 Label3,label4,list1,grid1,label4,text2為可見 .list1.visible=.t. .grid1.visible=.t. .label4.visible=.t. .grid1.recordsource="" &&設(shè)置表格的數(shù)據(jù)源為空 .text2.text="" endwith fori=1tofcount() &&將表的所有字段名稱填入List1列表框 thisform.list1.additem(field(i)) endfor use return.t. else&&若表不存在給出一個(gè)消息提示框

messagebox("你輸入的表文件實(shí)際并不存在!",64,"操作提示") return.f.&&不允許退出Text1框,直至填入實(shí)際表才退出。 endif thisform.refresh 文本框text2的Valid事件控制用戶輸入查詢條件表達(dá)式后自動(dòng)顯示表中經(jīng)過濾后的記錄等操作,過程代碼見圖6-73所示。查詢功能操作主要利用SQL語句來實(shí)現(xiàn),其格式為: select*from源表where查詢條件intocursor臨時(shí)表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論