VFP6表单设计课件_第1页
VFP6表单设计课件_第2页
VFP6表单设计课件_第3页
VFP6表单设计课件_第4页
VFP6表单设计课件_第5页
已阅读5页,还剩146页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2024-8-121

VFP6表單設計2024-8-1227.1設計表單

表單又稱為介面或窗體,是VFP提供的一種功能強大的介面。各種對話框和窗口都是表單的不同表現形式。它可以使用戶在簡單明瞭的介面中查看數據或將數據記錄輸入到表中。在表單設計器中可以處理下列內容:■表單中不同類型的對象■與表單相關聯的數據■頂層表單或子表單■能一起操作的多個表單■基於自定義範本的表單表單和表單集是擁有自己的屬性、事件和方法程式的對象,在表單設計器中可以設置這些屬性、事件和方法程式。表單集包含了一個或多個表單,可以將它們作為一個整體來操作。例如,如果一個表單集中有四個表單,可以在運行時用一個命令來顯示或隱藏它們。可以通過表單向導、表單設計器和快速表單來創建表單。可以2024-8-123用如下的三種方法之一新建一個表單:■在“專案管理器”中選定“表單”,並選擇【新建】按鈕。■在【檔】菜單中選擇【新建】命令,再選定“表單”,再選擇【新建檔】按鈕。■使用CREATEFORM命令。通過專案管理器創建表單示例1、選擇“文檔”選項卡2、選擇“表單”3、單擊【新建】4、進入新建表單程序,彈出“新建表單”對話框單擊“表單設計器”窗口新表單在新表單(Form1)上可以可視化地添加控件並進行屬性、方法程式設計。2024-8-1247.1.1設置數據環境

每一個表單或表單集都包括一個數據環境(DataEnvironment)。數據環境是一個對象,它包含與表單相互作用的表或視圖,以及表單所要求的表之間的關係。可以在“數據環境設計器”中直觀地設置數據環境,並與表單一起保存。在表單運行時,數據環境可以自動打開、關閉表或視圖。而且,通過設置“屬性”窗口中ControlSource(指定與對象對立聯繫的數據源)屬性設置框,在這個屬性框中列出了數據環境中的所有字段,數據環境將幫助設置控件用的ControlSource屬性。1、常用數據環境屬性

2024-8-125單擊打開圖片2、向數據環境設計器中添加表或視圖向數據環境設計器中添加表或視圖時,可以看到屬於表或視圖的字段或索引。若要向數據環境中添加表或視圖,可以按如下步驟來進行:(1)打開“數據環境設計器”,從“數據環境”菜單中選擇“添加”1、在表單上右擊,彈出表單的快捷菜單2、在快捷菜單中單擊“數據環境”菜單項,打開“數據環境設計器”3、添加表或視圖的方法與建立查詢時添加表或視圖相同4、在此框中選擇Student後單擊【添加】2024-8-126

在關閉了“添加表或視圖”對話框後,若還想向“數據環境”中添加表或視圖,可採用以下方法之一:

■在“數據環境設計器”中右擊,打開數據環境的快捷菜單,從中選擇“添加”菜單項,將“添加表或視圖”對話框再次打開,添加方法與上述相同。

■在“數據不境設計器”處於啟動狀態時,系統菜單上會有【數據環境】菜單,可以單擊【數據環境】|【添加】將“添加表或視圖”對話框再次打開。

■將要添加的表或視圖從打開的專案或“資料庫設計器”拖放到“數據環境設計器”中。若已將“數據環境設計器”關閉了,要添加表或視圖時,除了用前文所介紹的在表單上右擊打開表單的快捷菜單,用快捷菜單操作以外,也可以在系統菜單上單擊【顯示】|【數據環境】,將“數據環境設計器”打開,打開了“數據環境設計器”後的添加方法與上相同。當“數據環境設計器”處於活動狀態時,“屬性”窗口會顯示與數2024-8-127單擊打開動畫據環境相關的對象及屬性。在“屬性”窗口的“對象”框中,數據環境的每個表或視圖,表之間的每個關係,以及數據環境本身均是各自獨立的對象。要打開“屬性”窗口,可以在表單或“數據環境設計器”中右擊,在快捷菜單上選擇【屬性】菜單項在“數據環境設計器”中右擊,打開快捷菜單。單擊【屬性】菜單項打開“屬性”窗口。選項卡屬性或方法程式列表屬性值或方法程式屬性及方法程式功能說明單擊對象選擇框2024-8-1283、從數據環境設計器中移去表當將表從數據環境中移去時,與這個表有關的所有的關係也隨之移去。若要將表和視圖從數據環境設計器中移去,可以:(1)在“數據環境設計器”中選擇要移去的表或視圖。(2)在“數據環境”快捷菜單中選擇【移去】命令。在“數據環境設計器”中選擇要移去的表或視圖。在選定表或視圖上右擊,打開快捷菜單。單擊【移去】2024-8-1294、在數據環境設計器中設置關係如果添加進數據環境設計器的表具有在資料庫中設置的永久關係,這些關係將自動地加到數據環境中。如果表中沒有永久的關係,可以在數據環境設計器中設置這些關係。要在數據環境設計器中設置這些關係,可以將字段從主表拖到相關表中的相匹配的索引標識上。也可以將字段從主表拖到相關表中的字段上。如果和主表中的字段對應的相關表中沒有索引標識,系統將提示是否創建索引標識。1、先向表單的“數據環境設計器”添加兩個表,如圖按“學號”字段設置Student表與Grade表的一對多關係:在“數據環境設計器”中的Student表中選擇“學號”字段並將其拖到Grade表的“學號”字段上。右擊表間的關係連接線打開快捷菜單2024-8-1210在快捷菜單中單擊“屬性”,打開屬性窗口:在屬性選擇列表中選擇OneToMany單擊“屬性選擇框”彈出屬性值選擇.T.-真運算式生成器按鈕取消按鈕確定按鈕屬性選擇框將兩表設置為一對多關係父表別名如果在建立關係前Grade表沒有按關聯字段(學號)建立索引,則在將“學號”從Student表中拖到Grade表時將彈出對話框:單擊【確定】時系統將先按“學號”為Grade表建立索引,然後才建立兩表間的關係。2024-8-12115、在數據環境設計器中編輯關係在數據環境設計器中設置了一個關係後,在表之間將有一條連線指出這個關係。若要編輯關係的屬性,可在“屬性”窗口中從屬性列表框選擇要編輯的關係。關係的屬性對應於SETRELATION和SETSKIP命令中的子句和關鍵字。RelationalExpr(指定基於父表中的字段而又與子表中的索引相關的運算式)屬性的默認設置為主表中主關鍵字字段的名稱。如果相關表是以運算式作為索引的,就必須將RelationalExpr屬性設置為這個運算式。例如,如果相關表以UPPER(cust_id)作為索引,就必須將RelationalExpr屬性設置為UPPER(cust_id)。如果關係不是一對多關係,必須將OneTOMany屬性(指定是否只有在子表中遍曆了所有相關記錄之後才移動父表記錄的記錄指針)設置為“假”(.F.)。這對應於使用SETRELATION命令時不發出SETSKIP命令。將關係的OneToMany屬性設置為“真”(.T.),相當於發出SETSKIP命令。當流覽父表時,在記錄指針流覽完子表中所有的相關記錄之前,記錄指針一直停留在同一父記錄上。

注意:如果在表單或表單集中想設置一對多關係,必須將OneToMany屬性設置為“真”(.T.),甚至在資料庫中已經建立了永久一對多關係時也必須如此。返回2024-8-12127.1.2創建單文檔和多文檔介面

VFP允許創建兩種類型的應用程式:■多文檔介面(MDI)各個應用程式由單一的主窗口組成,且應用程式的窗口包含在主窗口中或浮動在主窗口頂端。VFP基本上是一個MDI應用程式,帶有包含於VFP主窗口中的命令窗口、編輯窗口和設計器窗口。■單文檔介面(SDI)應用程式由一個或多個獨立窗口組成,這些窗口均在Windows桌面上單獨顯示。MicrosoftExchange即是一個SDI應用程式的例子,在該軟體中打開的每條消息均顯示在自己獨立的窗口中。由單個窗口組成的應用程式通常是一個SDI應用程式,但也有一些應用程式綜合了SDI和MDI的特性。例如,VFP將調試器顯示為一個SDI應用程式,而它本身又包含了自己的MDI窗口。為了支持這兩種類型的介面,VFP允許創建以下幾種類型的表單:■子表單:包含在另一個窗口中,用於創建MDI應用程式的表2024-8-1213表單。子表單不可移至父表單(主表單)邊界之外,當其最小化時將顯示在父表單的底部。若父表單最小化,則子表單也一同最小化。■浮動表單:屬於父表單(主表單)的一部分,但並不是包含在父表單中。而且,浮動表單可以被移至螢幕的任何位置,但不能在父窗口後臺移動。若將浮動表單最小化時,它將顯示在桌面的底部。若父表單最小化,則浮動表單也一同最小化。浮動表單也可用於創建MDI應用程式。■頂層表單:沒有父表單的獨立表單,用於創建一個SDI應用程式,或用作MDI應用程式中其他子表單的父表單。頂層表單與其他Windows應用程式同級,可出現在其前臺或後臺,並且顯示在Windows任務欄中。1、指定表單類型創建各種類型表單的方法大體相同,但需設置特定屬性以指出表單應該如何工作。如果創建的是子表單,則不僅需要指定它應在另外一個表單中顯示,而且還需指定是否是MDI類的子表單,2024-8-1214即指出表單最大化時是如何工作的。如果子表單是MDI類的,它會包含在父表單中,並共用父表單的標題欄、標題、菜單以及工具欄。非MDI類的子表單最大化時將佔據父表單的全部用戶區域,但仍保留它本身的標題和標題欄。若要建立一個子表單,可以:■用“表單設計器”創建或編輯表單。■可將表單的ShowWindow屬性設置為下列值之一:●0-在螢幕中:子表單的父表單將為VFP的主窗口。●1-在頂層表單中。當子窗口顯示時,子表單的父表單是活動的頂層表單。如果希望子窗口出現在頂層表單窗口內,而不是出現在VFP主窗口內時。可選用該項設置。2024-8-1215■如果希望子表單最大化時與父表單組合成一體,可設置表單的MDIForm屬性(指定表單是否為MDI窗口)為“真”(.T.);如果希望子表單最大化時仍保留為一獨立的窗口,可設置表單的MDIForm屬性為“假”(.F.)。浮動表單是由子表單變化而來。若要指定為浮動表單,可以:■用“表單設計器”創建或編輯表單。■可將表單的ShowWindow屬性設置為以下值之一:●0-在螢幕中。浮動表單的父表單將出現在VFP主窗口。●1-在頂層表單中。當浮動窗口顯示時,浮動表單的父表單將是活動的頂層表單。■將表單的DeskTop屬性(指定表單是否包含在VFP主窗口中)設置為“真”(.T.)。若要指定頂層表單,可以:■用“表單設計器”創建或編輯表單。■將表單的ShowWindow屬性設置為“2-作為頂層表單”。2024-8-12162、顯示位於頂層表單中的子表單如果所創建的子表單中的ShowWindow屬性設置為“1-在頂層表單中”,則不需直接指定一頂層表單作為子表單的父表單。而是在子窗口出現時,VFP指派成為該子表單的父表單。若要顯示位於頂層表單中的子表單,可以:■創建頂層表單。■在頂層表單的事件代碼中包含DOFORM命令,指定要顯示的子表單的名稱。例如,在頂層表單中建立一個按鈕,然後在按鈕的Click事件代碼中包含如下的命令,如圖所示:注意:在顯示子表單時,頂層表單必須是可視的、活動的。因此,不能使用頂層表單的Init事件來顯示子表單,因為此時頂層表單還未啟動。■啟動頂層表單,如有必要,觸發用以顯示表單的事件。2024-8-12173、隱藏VFP主窗口在運行頂層表單時,可能不希望VFP主窗口是可視的。使用應用程式對象的Visible屬性(指定對象是可見還是隱藏)按要求隱藏或顯示VFP主窗口。若要隱藏VFP主窗口,可以:■在表單的Init事件中,包含下列代碼行:Appliction.Visible=.F.■在表單的Destroy事件中,包含下列代碼行:Appliction.Visible=.T.在某些方法程式或事件中,可使用THISFORM.Release命令關閉表單。注意:也可以在配置檔中包含以下行,用以隱藏VFP主窗口:SCREEN=OFF4、在頂層表單中添加菜單若要在頂層表單中添加菜單,可以:■創建頂層表單的菜單。返回2024-8-1218■將表單的ShowWindow屬性設置為“2-作為頂層表單”。■在表單的Init事件中,運行菜單程式並傳遞兩個參數:Domenuname.mprWITHoForm,LAutoRename其中,oForm是表單的對象引用。在表單的Init事件中,THIS作為第一個參數進行傳遞。LAutoRename指定了是否為菜單取一個新的唯一的名字。如果計畫運行表單的多個實例,則將.T.傳遞給LAutoRename。例如,可以使用下列代碼調用名為mySDImenu的菜單:DOmySDImenu.mprWITHTHIS,.T.7.1.3用表單集擴充表單

可以將多個表單包含在一個表單集中,作為一組處理。表單集有以下優點:■可同時顯示或隱藏表單集中的全部表單。■可以可視的調整多個表單以控制它們的相對位置。■因為表單集中所有表單都是在單個.SCX檔中用單獨的數據2024-8-1219環境定義的,可自動地同步改變多個表單中的記錄指針。如果在一個表單的父表中改變記錄指針,另一個表單中子表的記錄指針則被更新和顯示。注意:運行表單集時,將加載表單集所有表單和表單的所有對象。加載帶著很多控件的多個表單會花幾秒鐘的時間。1、創建表單集表單集是一個包含有一個或多個表單的父層次的容器。可在“表單設計器”中創建表單集,若要創建表單集,可從“表單”菜單中,選擇“創建表單集”選項。如果不需要將多個表單處理為表單組,則不必創建表單集。創建表單集以後,則可向其中添加表單。2、添加和刪除表單創建了表單集以後,可添加新表單或刪除表單。若要向表單集中添加附加的表單,可從“表單”菜單中選擇“添加新表單”。若要從表單集中刪除表單,可以:■在“表單設計器”“屬性”窗口的對象列表框中,選擇要刪除的2024-8-1220表單。■從“表單”菜單中選擇“移除表單”。如果表單集中只有一個表單,可刪除表單集而只剩下表單。若要刪除表單集,可從“表單”菜單中選擇“移除表單集”。表單以表的格式存儲在.SCX尾碼的檔中。創建表單時,.SCX表包含了一個表單的記錄,一個數據環境的記錄,和兩個內部使用記錄。為每個添加到表單或數據環境中的對象添加一個記錄。如果創建了表單集,則為表單集及每個新表單添加一個附加的記錄。每個表單的父容器為表單集,每個控件的父容器為其所在的表單。注意:當運行表單時,若不想在表單集中的所有表單的初始時就設置為可視的,可以在表單集運行時,將不准備顯示的表單的Visible屬性設置為“假”(.F.)。要顯示的表單的Visib1e屬性設置為“真”(.T.)。返回2024-8-12217.2向表單中添加對象7.1.1設置數據環境返回退出7.2.2向表單中添加VFP控件7.2.3向表單中添加數據綁定型控件7.2.4向表單中添加用戶自定義對象7.2.5確定表單中的控件數目7.2.6在表單中添加屬性和方法程式7.2.7包含預定義常量2024-8-12227.2.1向表單中添加VFP容器

除表單集和表單外,VFP還提供了四個基本容器類:命令按鈕組、選項按鈕組、表格和頁框。若要在表單中添加容器對象,可從“表單控件”工具欄上選擇所需的容器對象的按鈕(表格、頁框或按鈕組),並在表單中拖動,調整到所需要的大小。文本框選項按鈕組微調控件頁框形狀生成器鎖定標籤命令按鈕組列表框計時器線條超級連接查看類命令按鈕組合框圖象ActiveX綁定控件分隔符號選定對象編輯框複選框表格ActiveX控件容器命令鎖基本容器控件2024-8-1223在表單中添加命令按鈕組或選項按鈕組時,按鈕組默認包含兩個按鈕。在表單中添加頁框時,頁框默認包含兩個頁面,將ButtonCount屬性(指定一個命令按鈕組或選項按鈕組中按鈕的數目)或PageCount屬性(指定頁框對象中所含有的頁數)設置為需要的數目,可以包含更多的按鈕或頁面。向表單中添加表格時,ColumnCount屬性(指定表格、組合框或列表框中列對象的數目)的默認值為-1,表示處於AutoFill狀態。這樣,在運行時表格將顯示與RecordSource屬性(指定與表格控件建立聯繫的數據源)中指定的表具有同樣字段數量的列。如果不想處於“AutoFill”狀態,可以設置表格的ColumnCou-nt屬性為指定列的數目。VFP中的所有容器對象都有與它們相關聯的記數屬性和收集屬性。收集屬性是引用其每個被包含對象的數組,記數屬性是指示其包含的對象數的數值屬性。每個容器的收集和記數屬性根據包含在容器中的對象類型來命名,下表列出了容器及其相應的收集和記數屬性。2024-8-1224【例7-1】建立一個只含一個表格(列數由提供數據的表的字段數確定)和一個命令按鈕的表單,運行表單時,表格中顯示的內容底色紅綠交替。2024-8-1225第2步、單擊表單控件工具欄上的(表格)按鈕;第1步、在專案管理器中選擇“表單”,再單擊【新建】單擊【新建表單】在系統菜單上單擊【顯示】|【表單控件工具欄】第2步、單擊表單控件工具欄上的(表格)按鈕;第3步、在表單上按住滑鼠左鍵拖出一個矩形框,釋放滑鼠。在表單上單擊右鍵,選擇【數據環境】選擇Student表後單擊【添加】單擊【關閉】關閉“數據環境設計器”第5步、選擇表單上的表格對象,在“屬性”對話框中選擇“數據”選項卡,在屬性區域選擇RecordSource屬性,在屬性值框中選擇Student表對象框中選擇Form1選擇“方法程式”雙擊ActivateEvento=THISFORM.Grid1FORI=1TOo.ColumnCount

IFI%2=0o.Columns(i).BackColor=RGB(0,255,0)ELSEo.Columns(i).BackColor=RGB(255,0,0)ENDIFENDFOR要實現此功能,可採取如下步驟:第1步、選擇【檔】|【新建】菜單,然後選擇“表單”,再選擇【新建檔】或在專案管理器中選擇“表單”,再單擊【新建】,再在對話框中選擇【新建檔】;第5步、選擇表單上的表格對象,在“屬性”對話框中選擇“數據”選項卡,在屬性區域找到RecordSource屬性,在屬性值輸入文本框中選擇“Student”表。第3步、在表單上按住滑鼠左鍵拖出一個矩形框,釋放滑鼠。第4步、在表單上單擊右鍵,選擇【數據環境】,在彈出的“數據環境設計器”中單擊右鍵,選擇【添加】,再在彈出的“添加表或視圖”對話框中選擇“Student”再按【添加】按鈕,再按【關閉】按鈕,然後關閉“數據環境設計器”。第6步、選擇表單,再選擇“屬性”上的“方法程式”選項卡,雙擊“ActivateEvent”屬性,在方法程式編輯框中輸入代碼。2024-8-1226第7步、採用相似的方法建立一個命令按鈕,將Caption屬性(指定對象文本標題)值設置為“退出”。單擊“命令按鈕”按鈕在表單上單擊,添加“命令”按鈕關閉表單控件工具欄將Caption屬性值設置為“退出”在此處更改並輸入單擊注意:二處的值被修改!雙擊“退出”按鈕輸入事件代碼THISFORM.RELEASE關閉“屬性”窗口和事件代碼編輯窗口並單擊常用工具欄上的運行按鈕。表單運行結果:單擊表單上的【退出】按鈕可以將表單關閉。返回2024-8-12277.2.2向表單中添加VFP控件

控件工具欄能使用戶很方便地在表單中添加任何一種標準的VFP控件,常用的VFP控件如下所示:複選框圖像OLE綁定型控件文本框組合框標籤OLE容器控件計時器命令按鈕線條形狀編輯框列表框微調若要在表單中添加控件,可在“表單控件”工具欄中選擇所需的控件按鈕(單擊),在表單中單擊或拖動按鈕,把它調整到想要的大小。如在上例中向表單添加了一個“表格”控件和一個“命令按鈕”控件。返回2024-8-12287.2.3向表單中添加數據綁定型控件

通過給控件的ControlSource屬性設置字段或給表格的RecordSource屬性設置表或視圖,可使控件與表、視圖、表的字段、或視圖的字段中的數據相聯系。但也可通過直接將表和視圖從下列位置拖到表單中,以創建數據綁定型控件:■“專案管理器”■“資料庫設計器”■“數據環境設計器”“表設計器”中“屬性”選項卡的“FieldMapping”設置或“選項”對話框的“FieldMapping”選項卡的設置,是這種方法創建控件類的基礎。上例中將表格的RecordSource屬性設置為Student,即是將表格的數據源與表Student建立聯繫。返回2024-8-12297.2.4向表單中添加用戶自定義對象

VFP最強大的功能之一就是能創建在應用程式不同部分都可以使用和重複使用的類。如果創建了類,就能將它們添加到表單中。若要基於自定義類上添加對象,可在“專案管理器”中,將類拖動到容器中,當給工具欄添加類時,也可直接從“表單控件”工具欄中添加。1、在控件工具欄上添加類庫類庫必須在註冊後才能在“表單控件”工具欄中顯示出來。若要註冊類庫,可以:①從“工具”菜單中選擇“選項”打開“選項”對話框。②在“選項”對話框中選擇“控件”選項卡。③選擇“添加”按鈕。④在“打開”對話框中,選擇一個要加到“選定”列表中的類庫,並選擇“打開”按鈕。⑤重複步驟③和④。“選定”列表中列出了類庫中的類,在“表單設計器”中可以和2024-8-1230VFP基類一樣方便地使用這些類。注意:如果要在每次運行VFP時“表單控件”工具欄中的類庫都有效,可在“選項”對話框中,選擇“設置為默認值”。此外,也可以在“表單設計器”中直接註冊類庫。若要在表單設計器中註冊一個類庫,可以:①在“表單控件”工具欄中選擇“查看類”按鈕。②從子菜單中選擇“添加”。③在“打開”對話框中選擇要添加到“表單控件”工具欄上的類庫,然後選擇“打開”按鈕。2、從類庫中添加對象到表單如果從“選項”對話框的“類”選項卡或從“查看類”子菜單添加類庫,就能在“表單設計器”中訪問它們。若要從“表單控件”工具欄添加自定義對象,可以:①在“表單控件”工具欄中,選擇“查看類”按鈕。②從已註冊類庫的列表中選擇一個類庫,它包含了要加到表單中的控件。返回2024-8-1231③單擊所需要的控件,並在表單中拖動到合適大小。注意:如果想從“查看類”工具欄中移去一個可視類庫,可以在“選項”對話框的“控件”選項卡中,選擇“選定”列表中列出的一個可視的類庫,然後選擇“移去”按鈕。當向不是基於VFP基類的表單添加對象時,類庫的相對路徑(.vcx檔)存儲在表單的.scx檔中。如果要將表單或類庫移到另一個位置,在運行表單時VFP顯示一個對話框,可以人工尋找類庫。7.2.5確定表單中的控件數目

使用ControlCount屬性可以確定表單中究竟有多少個控件,而Controls[n]屬性允許引用表單上的任何一個控件。下麵的程式用於列印出當前活動表單上所有控件的Name屬性:ACTIVATESCREEN&&將輸出列印到VFP主窗口FORnCnt=1TOApplication.ActiveForm.ControlCount

?Application.ActiveForm.Controls[nCnt].NameENDFOR上述程式中的Application也可以用_Screen替換。返回2024-8-12327.2.6在表單中添加屬性和方法程式

可以添加許多個新的屬性和方法程式到一個表單。屬性擁有一個值,方法程式具有調用它時被運行的過程代碼。新建的屬性和方法程式與其它屬性與方法程式的引用一樣。1、建立一個新屬性如果有一個表單集,則在“表單設計器”中添加的屬性和方法程式就屬於此表單集。如果沒有建立表單集,則屬性和方法程式屬於表單。若要向表單或表單集中添加新屬性,可以:①從“表單”菜單中選擇“新建屬性”(NewProperty)命令。②在“新建屬性”對話框中,鍵入屬性名。還可以加入關於這個屬性的說明,它將顯示在“屬性”窗口的底部的屬性描述中。2、建立一個數組屬性一個數組屬性可以像其他屬性一樣都屬於表單或表單集,但不同的是數組屬性可用VFP的數組命令和函數處理它。若要創建一個數組屬性,可以:2024-8-1233①添加新屬性到表單。②在“新建屬性”對話框的“屬性名”框中鍵入數組屬性稱,並包括數組的大小和維數。例如,可在“新建屬性”對話框的“名稱”框中輸入myarray(10,5),去創建一個10行5列的二維數組,若要同時對該屬性加以說明,則還可以在下部的“說明”框中輸入需要對該屬性進行說明的內容,如“自定義數組”等。當添加數組屬性到表單時,屬性作為只讀顯示在屬性窗口中。可以在運行時管理數組,重新設置數組的維數,也可對數組屬性的元素賦值。3、創建新方法程式也可向表單中添加方法程式,並且可以用調用表單類方法程式的方式調用它。若要在表單或表單集中創建一個新方法程式,可以:①從“表單”菜單中選擇“新方法程式”。②在“新方法程式”對話框中,輸入方法程式的名稱。還可以包含有關這個方法程式的2024-8-1234說明,這是可選的。調用用戶自定義方法程式和調用基類方法程式一樣,都使用下麵的語法:ObjectName.MethodName建立的方法程式同樣可以接受參數並返回值,這種情況下,可以使用賦值語句來調用方法程式:cVariable=ObjectName.MethodName(cParameter,nParameter)7.2.7包含預定義常量

為了在方法程式中使用預定義常量,可在表單或表單集中用#INCLUDE命令包含一個頭檔。頭檔一般包含由#DEFINE預處理器偽指令定義的編譯時的常數。若要在表單中包含檔,可以:①從“表單”菜單中選擇“包含檔”。②在“包含檔”對話框的“包含檔”文本框中指定檔,或者選擇對話框按鈕以打開“包含”對話框並選定檔。③選擇“確定”。返回2024-8-12357.3處理對象7.3.1在設計時設置屬性返回退出7.3.2定義表單行為7.3.3編輯事件代碼和方法程式代碼7.3.4將表單和控件保存為類7.3.5運行表單7.3.6在運行時設置屬性2024-8-12367.3.1在設計時設置屬性

打開屬性窗口會顯示選定對象的屬性或事件。如果選擇了多個對象,這些對象共有的屬性將顯示在“屬性”窗口中。要編輯另一個對象的屬性或事件,可在“對象”框中選擇這個對象,或者直接從表單中選擇這個控件。若要設置屬性,可首先在“屬性”窗口中,從“屬性和事件”列表中選擇一個屬性。然後在“屬性設置”框中,為選中的屬性鍵入或選擇需要的設置。注意:那些在設計時為只讀的屬性,例如對象的Class屬性,在屬性窗口的“屬性和事件”列表框中以斜體顯示。如果屬性要求輸入字元值,不必用引號將這個值括起來。例如,要將一個表單的標題設為Student,只需在“屬性設置”框中鍵入Student;若想讓表單的標題是“Student”,即想讓引號也出現在窗口的標題上,在“屬性設置”框中鍵入“Student”。通過屬性窗口可以將屬性設置為運算式或函數的結果。若要用運算式設置屬性,可以:2024-8-1237■在“屬性”窗口中,選擇“函數”按鈕來打開“運算式生成器”。■在“屬性設置”框中鍵入“=”號,並在後面鍵入運算式。例如,如果想設置表單的Caption屬性,使它在運行表單時能夠指示當前的活動表,可在“屬性設置”框中鍵入:=Alias()。在屬性窗口中設置一個屬性運算式,並在運行時刻或設計時刻初始化對象時,才對這個屬性運算式進行求值。如果將屬性設置為用戶自定義函數的結果,那麼當設置或修改這個屬性,以及運行表單時,對這個函數進行求值。如果用戶自定義函數出現錯誤,有可能打不開這個表單。此外,也可以在對象的Init事件中將屬性設置為用戶自定義函數,如下例所示。This.Caption=myfunction()其中myfunction()為自定義函數名如果用戶自定義函數出現錯誤,就不能運行表單,但可以修改它。如果要指定表單的圖示,將表單的Icon屬性設置為一個.ico檔的檔案名。返回2024-8-12387.3.2定義表單行為

當在“表單設計器”中設計表單時,表單是“可視”的。除非Visible(指定對象是可見還是隱藏)屬性設置為“假”(.F.),對表單的外觀和行為的修改將立刻在表單上反映出來。如果將WindowState(指定表單窗口在運行時是最大化、最小化還是採用普通大小)屬性設置為0(普通)、1(最小化)或2(最大化),表單設計器中的表單會立即體現這一設置。如果將Movable屬性(指定在運行時刻用戶能否移動對象)設置為“假”(.F.),那麼不但用戶在運行時不能移動表單,即使在設計時也不能移動它。因此應該在設置那些決定表單行為的屬性之前,先完成表單的功能設計,並添加所有需要的控件。表7-3列出了在設計時常用的表單屬性,它們定義了表單的外觀和行為。2024-8-1239返回2024-8-12407.3.3編輯事件代碼和方法程式代碼

事件是用戶的行為,如單擊滑鼠或滑鼠的移動,也可以是系統行為,如系統時鐘的進程。方法程式是和對象相聯系的過程,只能通過程式以特定的方式啟動。當觸發事件或啟動方法程式時,可以指定要執行的代碼。若要編輯事件或方法程式代碼,可以:①從“顯示”菜單中選擇“代碼”命令。②在“過程”框中選擇事件或方法程式。③在編輯窗口中鍵入代碼,在觸發事件或啟動方法程式時將執行這些代碼。例如,如果在表單上已有一個標題為“退出”的命令按鈕,在這個按鈕的Click事件中可包括這樣一行代碼:THISFORM.Release注意:若要在編輯窗口中查看不同過程,請按【PageDown】或【PageUp】鍵。當用戶單擊這個命令按鈕時,表單被從螢幕和記憶體中刪除。如果不想從記憶體中刪除表單,可以在Click事件代碼中以下一行代碼來代替上一行代碼:THISFORM.hide&&將表單隱藏起來注意:如果表單集、表單或表單集中任何表單上任何對象的Init事件代碼返回“假”(.F.),就不能創建這個表單或表單集。返回2024-8-12417.3.4將表單和控件保存為類

也可以將表單或表單上的控件子集保存為類定義。如果您打算創建基於表單的子類,或在其他表單中重新使用這些控件,可將表單作為類定義來保存。若要將表單或選定的控件保存為類定義,可以:①從“檔”菜單中選擇“另存為類”。②在“另存為類”對話框中選擇“當前表單”或“選定控件”。③在“類名”框中輸入類的名稱。④在“檔”框中輸入保存類的檔案名。⑤選擇“確定”按鈕。如果沒有給出檔擴展名,保存檔時會加上默認的.vcx擴展名,如果將表單保存為類定義,就可以用MODIFYCLASS命令對它進行修改。返回2024-8-12427.3.5運行表單

可以從介面直接運行表單,或在程式代碼中運行表單。1、交互地運行表單有幾種方法運行設計好的表單。如果在“表單設計器”中工作,可通過單擊“表單設計器”工具欄中的“運行”按鈕測試表單。如果想在“表單設計器”重新打開表單,可在工具欄中選擇【修改表單】按鈕。也可以從專案中運行表單,或者以編程方式運行它。若要以交互方式運行表單,可在“專案管理器”中,選擇要運行的表單,再選擇“運行”按鈕。或者在“命令”窗口中,使用DOFORM命令運行表單。也可以從【程式】菜單中選擇【運行】來運行菜單,在“檔類型”框中選擇“表單”,選定一個表單再選定【運行】按鈕。2、從程式中運行表單若想在程式中運行表單,需要在與事件相關聯的代碼、方法程式代碼或在程式或過程中包含DOFORM命令。2024-8-12433、命名表單對象默認情況下,當使用DOFORM命令時,表單對象的名稱與.scx檔案名稱一樣。例如,下麵的一行代碼運行Student.scx表單。VFP自動為這個表單創建一個名為Student的對象變數:DOFORMStudent若要命名表單對象,請使用DOFORM命令的NAME子句。例如,下麵的命令運行一個表單,同時創建兩個表單對象變數名:DOFORMStudentNAMEmystud1DOFORMStudentNAMEmystud2

4、處理表單對象如果在“命令”窗口發出DOFORM命令,表單對象就和一個公共變數相關聯,可以通過這個變數名來訪問表單對象。例如,在“命令”窗口發出下麵的命令,打開一個名為Student的表單並改變它的標題。DOFORMStudentStudent.Caption=”學生情況登記”2024-8-1244如果在“命令”窗口發出下麵的命令,在活動的輸出窗口中將顯示O,表明Student是一個對象:?TYPE(“Student”)如果在程式中發出DOFORM命令,表單對象作用範圍限於這個程式,如果程式或過程運行結束,會移去對象,但表單仍然可見。例如可以運行下麵這個程式:*formtest.prgDOFORMStudent在運行完程式後,表單仍然可見,表單上的所有控件仍然處於活動狀態,但TYPE(“Student”)返回U表明Student是沒有定義的變數,因此在“命令”窗口中發出下麵的命令將產生錯誤:Student.Caption=”學生情況登記”但還可以使用應用程式對象的ActiveForm、Forms和FormCount屬性訪問表單。5、將表單鏈接到表單對象變數DOFORM命令中的LINKED關鍵字允許將表單和表單對象變數2024-8-1245鏈接起來,如果包含了LINKED關鍵字,當與表單對象相關聯的變數超出範圍時,表單將被釋放。例如,下麵命令創建一個鏈接到對象變數mystud2的表單:DOFORMStudentNAMEmystud2LINKED當釋放mystud2時,表單也關閉。6、關閉活動的表單若想允許用戶通過雙擊控件框,或選擇表單“控件”菜單中的“關閉”來關閉活動的表單,則需要設置表單的Closable屬性。若要允許用戶關閉活動表單,可以:①在“屬性”窗口中,將Closable屬性設置為“真”(.T.)。②使用RELEASE命令。例如,可以通過在“命令”窗口或程式中發出下麵的命令來關閉和釋放表單Student:RELEASEStudent

也可以在一個控件,如標題為“退出”的命令按鈕的Click事件代碼中包含下麵的命令,它允許用戶關閉和釋放表單:2024-8-1246THISFORM.Release

可以在與表單的對象相關聯的代碼中使用RELEASE命令,但在RELEASE方法程式中卻不會執行包含的任何代碼。

注意:當釋放表單時,同時也從記憶體中釋放了為這個表單創建的對象變數。每一個表單集有一個單獨的變數,因此不釋放表單集就不能釋放表單集中的表單。如果想要釋放表單集,可使用RELEASE.THISFORMSET命令。如果想將一個表單從螢幕移去,不再讓用戶看見或使用它,可以使用THISFORM.Hide命令。返回2024-8-12477.3.6在運行時設置屬性

表單由控件等對象組成。每個對象都有自己的屬性,對象的屬性是獨立存在的,可以分別定義每個對象的屬性。打開屬性窗口會顯示選定對象的屬性或事件。如果選擇了多個對象,這些對象共有的屬性會顯示在“屬性”窗口中。要編輯另一個對象的屬性或事件。可以在“對象”框中選擇這個對象,或者直接從表單中選擇這個控件。VFP中對象的屬性除了能在設計時確定以外,還能在運行時對屬性進行充分的控制。1、在對象層次上引用對象若想操作一個對象,需要確定它和容器層次的關係。在容器層次的最高級(表單集或表單)需要引用對象變數。除非使用DOFORM命令中的NAME子句,否則對象變數和.scx檔有相同的名稱。通過引用由點號(.)分隔的對象變數、控件和屬性可以處理屬性,如下所示:Objectvariable.[form.]perty=setting2024-8-1248對象屬性設置的一般格式說明:..=對象變數,包含包含對象的容器及對象等。容器和對象間也要用逗點分隔。逗點分隔符號逗點分隔符號等號賦值操作控件。其中包含有包含控件的容器,容器和控件也要用逗點分隔。需要設置值的屬於指定控件的一個屬性。所賦的值在【例7-1】中使用表單的ActivateEvent事件中使用了下列代碼:o=THISFORM.Grid1o.Columns(i).BackColor=RGB(0,255,0)這兩條命令相當於一條命令:THISFORM.Grid1.Columns(i).BackColor=RGB(0,255,0)對象變數控件屬性值2024-8-1249可在表單或表單集中使用THIS、THISFORM和THISFORMSET引用對象。例如,要想在單擊命令按鈕時改變它的標題,可在命令按鈕的Click事件代碼中包含下麵的命令:THIS.Caption=“保存”2024-8-1250對象引用示例:在第5章中的面向對象程式設計中曾用到下述命令:設置Combo2(字體設置)的ClickEvent事件代碼(工具欄不能屬於一個表單,只能屬於表單集)THISFORMSET.ActiveForm.ActiveControl.FontName=THIS.VALUE指定表單集指定屬於指定表單集的一個表單指定屬於指定表單的一個控件指定屬於指定控件的一個屬性為指定屬性設置值設置Combo3(字型大小設置)的ClickEvent代碼:THISFORMSET.ActiveForm.ActiveControl.FontSize=;VAL(ALLTRIM(THIS.VALUE))

設置Command1的ClickEvent代碼:THISFORMSET.ActiveForm.ActiveControl.FontBold=;!THISFORMSET.ActiveForm.ActiveControl.FontBoldTHIS.FontBold=THISFORMSET.ActiveForm.ActiveControl.FontBold說明:賦值時所賦的值既可以是指定值,也可是變數。2024-8-12512、在運行時使用運算式設置屬性在運行時也可以使用運算式或函數來設置屬性。若要在運行時將屬性設置為運算式,可為屬性指定一個運算式,或者為屬性指定一個用戶自定義函數的結果。例如,建立一個“屬性設置示例”表單,根據一個變數的不同值,可以將一個按鈕的標題設置為“添加”或“保存”,另一個按鈕的標題設置為“編輯”或“還原”。首先在創建表單對象時中聲明這個變數並設置表單的名稱和“退出按鈕”的名稱:

即在表單的InitEvent方法程式中寫入如下代碼(也可在ActivateEvent事件中):PUBLICglediting&&定義變數Glediting=.F.&&為變數賦初始值THISFORM.CAPTION="屬性示例"&&設置表單名稱THISFORM.COMMAND3.CAPTION="退出"&&將Command3按鈕名設為“退出”然後在第一個和第二個命令按鈕的ClickEvent事件中,分別添加如下代碼:glediting=IIF(glediting=.F.,.T.,.F.)&&當點擊事件發生時,變數值發生變化THISFORM.Refresh&&調用表單的刷新方法程式2024-8-1252最後在表單的Refresh方法程式中添加如下代碼:THISFORM.COMMAND1.CAPTION=IIF(glediting=.F.,"添加","保存")THISFORM.COMMAND2.CAPTION=IIF(glediting=.F.,"編輯","還原")dodefault()

第1、2行命令是根據glediting的值設置命令按鈕名稱。

Caption設置中使用了一個IIF()運算式。IIF()是一個函數。

IIF()的功能是:該函數計算一個邏輯運算式的值,然後根據計算結果,返回兩個運算式中的一個。如果邏輯運算式的值為“真”,則返回第一個運算式;如果值為“假”,則返回第二個運算式。第3條命令的作用是調用父類中的方法程式。在此處是調用表單父類中的Refresh方法程式。在表單中單擊【添加】或【編輯】按鈕時,按鈕名改變。當再次在表單中單擊【添加】或【編輯】按鈕時,按鈕名再次改變。如此迴圈改變。2024-8-12533、設置多個屬性用戶可以同時為一個表單的多個對象設置多個屬性,此時可使用WITH…ENDWITH結構。例如,對於上面例子中的兩個命令按鈕,在標題名稱變化時還要使它們的寬度、字體、字體風格、背景顏色變化,可在表單的Refresh方法程式代碼中包含下麵的語句:IFglediting=.F.

WITHTHISFORM.COMMAND1

.Caption="添加".Width=100.FontName="黑體".FontBold=.T..ForeColor=RGB(0,128,255)ENDWITHWITHTHISFORM.COMMAND2.Caption="編輯".Width=100.FontName="黑體".FontBold=.T..ForeColor=RGB(0,128,255)ENDWITHELSEWITHTHISFORM.COMMAND1.Caption="保存".Width=75.FontName="宋體".FontBold=.F..ForeColor=RGB(0,0,0)ENDWITHWITHTHISFORM.COMMAND2.Caption="還原"2024-8-1254.Width=75.FontName="黑體".FontBold=.F..ForeColor=RGB(0,0,0)ENDWITHENDIFDODEFAULT()表單運行後的結果如圖返回2024-8-12557.4管理表單7.4.1隱藏和釋放表單7.4.2將參數傳遞到表單7.4.3從表單返回值7.4.4在表單中使用本地和遠程數據退出返回2024-8-12567.4.1隱藏和釋放表單

用戶可以隱藏一個表單,使它不可見。在隱藏表單後,用戶不能訪問表單上的控件,但仍可以用程式完全控制它們。若要隱藏表單,可使用Hide方法程式。例如,在與命令按鈕的Click事件相關的代碼中,可以包含下麵一行代碼:

THISFORM.Hide當用戶單擊命令按鈕時,表單仍在內存中,但不可見。當用戶完成對表單的操作後,就可以讓用戶釋放表單。在釋放表單後,用戶就不能再訪問表單的屬性和方法程式了。若要釋放表單,可以使用RELEASEE命令。例如,在與“退出”命令按鈕的Click事件相關的代碼中包含下麵一行代碼:

THISFORM.Release當用戶單擊“退出”命令按鈕時,表單被關閉。返回2024-8-12577.4.2將參數傳遞到表單

在運行表單時,為設置屬性值或者指定操作的默認值,有時需要將參數傳遞到表單。若要將參數傳遞到表單,可以:①創建容納參數的表單屬性,如ItemName和ItemQuantity②在表單的Init事件代碼中,包含PARAMETERS語句:PARAMETERScString,nNumber③在表單的Init事件代碼中,將參數分配給屬性:THIS.ItemName=cStringTHIS.ItemQuantity=nNumber例如,現通過向表單傳遞參數,設置“屬性設置示例”表單中二個命令按鈕的FontName和FontSize屬性,在運行表單時改變其字體和字型大小。可在表單的Refresh方法程式中的DODEFAULT()命令行前再寫入如下代碼:THISFORM.COMMAND1.FontName=THIS.ItemNameTHISFORM.COMMAND2.FontName=THIS.ItemNameTHISFORM.COMMAND1.FontSize=THIS.ItemQuantityTHISFORM.COMMAND2.FontSize=THIS.ItemQuantity④當運行表單時,在DOFORM命令中包括一個WITH子句:DOFORM屬性設置示例WITH“隸書”,12返回2024-8-12587.4.3從表單返回值

在整個應用程式中都可以使用表單,讓用戶指定值。若要從表單返回值,可以:①將表單的WindowType屬性設置為1,使表單成為模式表單。②在與表單的UnLoad事件相關的代碼中,包含一個帶返回值的RETURN命令。③在運行表單的程式或方法程式中,在DOFORM命令中包含TO關鍵字。例如,對“屬性設置示例”表單在運行時向其傳遞參數設置命令按鈕的字體和字型大小,在結束表單的運行時,要求表單將命令按鈕最後的狀態通過變數返回到一個變數Sign中:向表單傳遞參數同前,再進行如下設置:先將表單的Window-Type屬性設置為“1-模式”;再在表單的UnLoad事件中加入如下代碼:RETURNGlediting然後執行下列命令:DOFORM屬性設置示例WITH"隸書",12TOSign返回2024-8-12597.4.4在表單中使用本地和遠程數據

可以創建這樣的表單,它可以很容易地在使用本地數據和遠程數據(例如,存儲在數據伺服器上)之間切換。這樣就可以使用本地或測試數據來創建應用程式的原型,然後切換到遠程或實際的數據上,而不對表單做實質性的修改。能夠在本地和遠程資料庫之間切換的關鍵在於使用的是視圖而不是直接將表單(及其控件)與錶鏈接。若要訪問遠程數據,則必須在任何事件中使用視圖。因此為了方便本地數據與遠程數據的切換,也需為本地數據創建視圖。創建表單時,將這兩個視圖都添加到它的數據環境中,根據需要進行切換。若要創建可在本地和遠程數據間切換的表單,可以:①創建數據的兩個視圖,一個指向遠程數據,另一個指向本地數據。②在表單的“數據環境”中添加這兩個視圖。③在“數據環境”的“屬性”中,為兩個視圖設置同樣的Alias屬性,並將“數據環境”的OpenViews屬性設置為1:LocalOnly或2:2024-8-1260RemoteOnly(取決於表單運行時使用哪個視圖)。注意:由於兩個視圖使用同樣的別名,不要選擇默認的0:Local和Remote。④在表單中,添加需要的控件,將ControlSource屬性設置為視圖的相應字段。由於兩個視圖使用同樣的別名,表單運行時控件將自動對那個活動的視圖作出反應。創建表單後,通過改變“數據環境”的OpenView屬性切換視圖的別名。可以在使用“表單設計器”時在“數據環境”中做此工作,如果要在運行時切換視圖,還可以寫出代碼並將其附加到某個事件中。例如,可將這些代碼放入ActivateEnevt事件中:THISFORM.DataEnvironment.OpenViews=2&&使用遠程視圖如果要創建一個可在本地和遠程數據間切換的表單,還必須設計定位代碼用以容納兩個視圖,尤其是設計具有一對多關係的表單。例如,如果表單只訪問本地表或視圖,可在Next命令按鈕中使用下列代碼,用來移動指針到臨時表的下一個記錄:SKIP1THISFORM.Refresh()2024-8-1261但是,當在遠程視圖中定位時,此代碼無效。因為代碼假設臨時表包含了表單需要的所有數據。通常情況下,希望從遠程數據源上下載的數據越少越好。解決的辦法是使用帶參數的視圖。例如,用來編輯客戶資訊的視圖定義如下代碼:SELECT*FORMCUSTOMERSWHERECUSTOMERS.COMPANY_NAME=?PCompanyName表單運行時,會在對話框中提示用戶輸入客戶名或允許用戶在文本框中輸入一個名稱。“顯示”按鈕的代碼可能與以下代碼相似:pCompanyName=THISFORM.txtpCompanyName.ValueREQUERY(“Customer”)THISFORM.refresh()返回2024-8-12627.5控件使用要點和技巧7.5.1根據任務選擇合適的控件

退出7.5.2使用命令按鈕和命令按鈕組控件

7.5.3用於顯示文字、圖形或圖片的控件

7.5.4使用表格控件

7.5.5使用OLE綁定型控件

7.5.6設置控件的Tab鍵次序

7.5.7允許用戶拖放

7.5.8啟用和廢止控件

返回2024-8-12637.5.1根據任務選擇合適的控件VFP的控件具有良好的靈活性和通用性。雖然可以用多種控件來完成某個特定的任務,但最好保持控件的使用方法的一致性。這樣,當用戶一看到所提供的介面,就知道自己能做什麼。例如,標籤和命令按鈕都具有Click事件,但熟悉圖形介面的用戶更習慣單擊命令按鈕來執行指令。表單的絕大部分功能可以歸為下列幾類:■為用戶提供一組預先設定的選擇■接受不能預先設定的用戶輸入■在給定範圍內接受用戶輸入■允許用戶執行特定的命令■在給定的時間間隔內執行特定的命令■顯示資訊1、預先設定選擇的控件確保資料庫數據有效性的最直接方法之一,就是為用戶提供一組預先設定的選項。控制用戶的選擇,可以保證在資料庫中2024-8-1264不存儲無效數據。可以用下列控件為用戶提供一組預先設定的選擇:選項組、列表框、下拉列表和複選框。(1)使用選項組選項組是包含選項按鈕的容器。通常,選項按鈕允許用戶指定對話框中幾個操作選項中的一個,而不是輸入數據。例如,選項按鈕可以指定是向檔或印表機輸出結果還是進行列印預覽。■設置選項組中的選項按鈕數目在表單中創建一個選項組時,它默認包含兩個選項按鈕,改變ButtonCount屬性可以設置選項組中的選項按鈕數目。例如,要想使一個選項組包含六個選項按鈕,可將這個選項組的ButtonCount屬性設置為6。選項組的Value屬性表明用戶選定了哪一個按鈕。例如,選項組有六個選項按鈕,如果用戶選擇了第四個選項,選項組的Value屬性就是4。如果選項組的ControlSource屬性是一個字元型字段,或者如果在運行表單之前將Value屬性設置為一個字元值,則選項組的Value屬性就是被選中的選項按鈕的標題。2024-8-1265■設置選項按鈕的屬性要想在“表單設計器”中人工調整選項組或命令按鈕組的單個組件,可從在“屬性”窗口中設置單個按鈕的屬性,也可以在運行時通過指定選項按鈕的名稱和屬性值來設置這些屬性。如,在表單某一控件的某一方法程式中有如下一行代碼,設置OptionGroup1選項組中Option4按鈕的標題:THISFORM.OptionGroup1.Option4.Caption=”按學號分類”還可以在運行時使用Buttons屬性,並指定選項按鈕在組中的索引號來設置這些屬性。例如,如果Option4是組中的第四個按鈕,下麵一行代碼同樣完成對Option4標題的設置:THISFORM.OptionGroup1.Buttons(4)Caption=”按學號分類”若要設置組中所有按鈕的屬性,可使用組的SetAll方法程式。下麵一行代碼將表單中OptionGroup1選項組的所有按鈕設置為無效:THISFORM.OptionGroup1.SetAll(“Enabled”,”.F.”,”OptionButton”)SetAll方法程式的功能是為容器對象中的所有控件或某類控件指定一個屬性值。其語法格式為:Container.SetAll(<屬性名>,<屬性值>[,<基類>])2024-8-1266■啟用或廢止組中的按鈕前面的示例表明了如何通過編程方式廢止組中的所有選項按鈕。當廢止了選項按鈕時,它們使用選項按鈕的DisabledForeColor和DisabledBackColor屬性指定的顏色顯示。也可以將選項組的Visible屬性設置為“假”(.F.),這樣用戶就不會看到任何跡象。■判斷當前選定的按鈕根據選項組的Value屬性可以判斷用戶選定了哪個按鈕。如果按鈕的控件源為數值型,且組中有五個按鈕,如果選定了第三個按鈕,則選項組的Value屬性值為3。如果沒有選定選項按鈕,選項組的Value屬性為0。使用組的Value和Buttons屬性,也可以確定選定選項按鈕的標題。例如,下麵一行代碼將選定選項的Caption屬性保存到名為cSelected的變數中:*下麵的程式代碼添加在表單的OptionGroup1選項組的Click事件方法程式中oGroup=THISFORM.OptionGroup1cSelected=oGroup.Buttons(oGroup.Value).CaptionTHISFORM.Refresh2024-8-1267在表單的InitEvent事件方法程式中添加下麵一行代碼:PUBLICcSelected在表單中加入一個文本框,將其ControlSource屬性設為cSelected當此表單運行後,當點擊OptionGroup1選項組時,被選中的選項的標題會在表單上的文本框中顯示出來。表單設計完成後如圖:當運行表單並在選項組中單擊Option4時的表單結果如圖:■用選項按鈕篩選列表對一個表單的數據源如果需要有少數幾種數據過濾方式,可以使用2024-8-1268選項按鈕允許用戶在篩檢程式之間切換。在下面的示例中,假定有一個包含三個選項按鈕的選項組和一個表格控件的表單,表格控件的屬性設置如下:對象屬性設置GRID1GRID1RecordSourceTypeRecordSource1­—別名Student篩選條件是在選項按鈕的Click事件代碼中設置的,當用戶選擇選項按鈕時,對表格中數據進行篩選的事件代碼如下:2024-8-1269請不要忘記在關閉按鈕的Click事件中或Destroy事件中包含SETFILTERTO命令,以便當用戶關閉表單時重置篩選條件。注意:當表格的數據源已經更改時,為刷新表格中的數據,可使用Refresh方法程式。按此方法建立表單且運行後的結果如所示。■使用選項按鈕將用戶的選擇存儲到表中在少數情況下,可以通過選項按鈕獲得用戶資訊,並通過保存Caption屬性將這些資訊保存在表中。例如,在一個標準化考試2024-8-1270的應用程式中,可以使用選項按鈕,使用戶在多項選擇A、B、C、D中進行選擇。還可以用選項按鈕在學生表中指明性別等。若要將一個選項按鈕的Caption屬性保存到表中,可以:①將選項組的Value屬性設置為空字元串。②將選項組的ControlSource屬性設置為表中的一個字元型字段。③在選項組的Click事件代碼中加入如下代碼:THISFORM.Refresh例如,在Student表中加入“新生類別”字元型字段,將選項組中選項按鈕的標題分別設置為“城應”、“農應”、“城往”和“農往”,並且選項組的ControlSource屬性設置為“新生類別”,那麼當用戶選擇標題為“城應”的選擇項時,“城應”將被保存在表Student的“新生類別”字段中。(2)使用列表框和下拉列表框列表框和下拉列表框(即style屬性為2的組合框控件—下拉列表)為用戶提供了包含一些選項和資訊的可滾動列表。列表框中,任何時候都能看到多個項;而在下拉列表中,只能看到一個項,用戶可單擊向下按鈕來顯示可滾動的下拉列表框。2024-8-1271■常用的列表屬性和方法程式■填充列表框或組合框通過設置RowSourceType和RowSource屬性,可以用不同數據源中的項填充列表框。RowSourceType屬性決定列表框或組合框2024-8-1272的數據源類型,如數組或表,設置好RowSourceType後,設置RowSource屬性可指定列表項的數據源。RowSourceType共有十種類型:0-無,表示沒有,由程式向列表中添加項;1-值;2-別名;3-SQL語句;4-查詢;5-數組;6-字段;7-檔;8-結構;9-彈出式菜單。■創建具有多列的列表框雖然列表框默認為一列,但VFP中的列表框可以包含任意列。多列列表框和表格的區別在於,在多列列表框中用戶一次選擇一行,而在表格中用戶可以選擇每個單元,另外不能直接編輯列表中的數據。若要在列表框中顯示多列,可以:①將ColumnCount屬性設置為所需的列數。②設置ColunWidths屬性。例如,如果列表框中有三列,下麵的命令將各列寬度分別設置為60、45和80。THISFORM.LIST1.ColumnWidths=”60,45,80”③將RowSourceType屬性設置為“6-字段”。2024-8-1273■允許用戶選擇列表框中的多項默認情況下,一次只能選定一個列表項,但也可以允許用戶選擇列表中的多個列表項。若要選擇列表中的多項,可將列表的MultiSelect屬性設置為“真”。為了處理選定的項,例如把它們複製到一個數組或在應用程式的其他地方使用它們,可以迴圈遍曆各列表項,處理Selected屬性為“真”的項。下麵的代碼包含在列表框的InteractiveChange事件中,在comboselected組合框中顯示這個列表框中的選定項,並且在txtNoSelected文本框中顯示選定項的數目:nNumberSelect=0

&&跟蹤數目的變數THISFORM.Combo1.Clear&&清除組合框FORnCnt=1TOTHIS.ListCount

IFTHIS.Selected(nCnt) nNumberSelect=nNumberSelect+1 THISFORM.Combo1.Additem(THIS.List(nCnt)) ENDIFENDFORTHISFORM.Text1.Value=nNumberSelectTHISFORM.Refresh2024-8-1274■允許用戶在列表框中添加項除了讓用戶從列表框中選擇項外,還允許用戶交互地向列表中添加項。若要以交互方式向列表添加項,可使用AddItem方法程式。在下面示例中,當用戶按E

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论