程序設(shè)計 課件第9章(2)_第1頁
程序設(shè)計 課件第9章(2)_第2頁
程序設(shè)計 課件第9章(2)_第3頁
程序設(shè)計 課件第9章(2)_第4頁
程序設(shè)計 課件第9章(2)_第5頁
已閱讀5頁,還剩113頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一. 標簽控件 1)標簽控件是按一定格式顯示在表單上的文本信息,用來顯示表單中各種說明或提示信息,按指定的格式顯示、應(yīng)用程序的名稱、字段的標題、選項的標題等。,2)主要屬性:標簽的標題、大小、顏色,以及顯示的內(nèi)容的字體、大小等。 Caption:設(shè)置標簽的標題文本 Name :標簽控件的名稱 Alignment:指定標題文本的對齊方式,在設(shè)計和運行時可用。 Enabled:表示控件是否可用,缺省一般為真,不可用狀態(tài)為灰狀顯示。 Bodystyle:邊框形狀,8.4常用的表單控件,【例】使用標簽處理單行和多行的信息輸出,運行時通過代碼來改變輸出的內(nèi)容,如圖4-3所示。 步驟: (1)建立應(yīng)用程序

2、界面,(2)設(shè)置對象屬性,編寫命令按鈕Command1的Click事件代碼: THISFORM.Label1.Caption=運行時修改的標簽內(nèi)容 THISFORM.Label2.Caption= 對于一個較長的或在運行時可能變化的標題,標簽提供了+; 兩種屬性:AutoSize和WordWrap,來改變控件尺寸以適應(yīng)較長或較短的標題。 THISFORM.Label2.AutoSize=.T.,(3)編寫程序代碼,【例】交換兩個變量中的數(shù)據(jù),如圖所示。,步驟: (1)界面設(shè)計略。,(3)編寫代碼 編寫命令按鈕Command1的Click事件代碼: t = THISFORM.Label2.Cap

3、tion THISFORM.Label2.Caption = THISFORM.Label4.Caption THISFORM.Label4.Caption = t,(2)設(shè)置對象屬性,【例】設(shè)計藝術(shù)的標簽??梢栽O(shè)計兩種形式的藝術(shù)標簽:一種是投影式標簽,一種是立體式標簽。,設(shè)計步驟如下: 選擇“新建”表單,進入表單設(shè)計器,增加一個命令按鈕Command1和一個“標簽”控件Label1。 修改其屬性,見表。,【例8.5】制作一個具有陰影效果標題和兩個豎排標題的表單,效果如圖8.19所示。, 啟動“窗體設(shè)計器”窗口,創(chuàng)建一個新表單。 在表單的合適位置添加4個標簽控件Label1、Label2、La

4、bel3、Label4。 定義表單及各標簽控件的有關(guān)屬性,具體內(nèi)容見表8.10。,主要用來控制程序的執(zhí)行和數(shù)據(jù)表中數(shù)據(jù)的操作等。 主要屬性:caption,name,left,top,height,width, Default,cancel,enabled,ToolTipText(按鈕的功能提示文本) 主要事件:click單擊事件,二、命令按鈕控件(command),【例8.6】修改例8.5設(shè)計的表單,為其添加一個“關(guān)閉”按鈕,實現(xiàn)關(guān)閉當前表單的功能;當鼠標指向該按鈕時,可顯示它的功能提示信息,運行結(jié)果如圖8.20所示, 打開star.scx表單文件,出現(xiàn)該表單的“窗體設(shè)計器”窗口。 在表單中

5、添加一個Commandl命令按鈕控件。, 設(shè)置表單及命令按鈕控件的有關(guān)屬性,具體內(nèi)容如表9.11所示。 編寫Commandl的Click事件代碼: Thisform.Release 保存并運行表單。,主要用于數(shù)據(jù)表中某些字段的輸入、輸出,以及從窗口中給內(nèi)存變量賦值等操作。 主要屬性: Name屬性:設(shè)置文本框控件的名稱。 Value:文本框中編輯的數(shù)據(jù)的值 Fontname、fontsize、fontbold:字體、大小、粗體等 Passwordchar:文本框中顯示指定的字符,而不是真正輸 入的內(nèi)容 注:文本框的數(shù)據(jù)可以是數(shù)據(jù)表中的字段,若數(shù)據(jù)來源為表, 則可以直接從數(shù)據(jù)環(huán)境中將相應(yīng)字段拖到

6、表單上??梢钥焖?建立控件。,三、 文本框,ControlSource:主要設(shè)置文本框中所編輯的數(shù)據(jù)與數(shù)據(jù) 表中的哪個字段相對應(yīng)。 Inputmask屬性:指定文本框中輸入或顯示的數(shù)據(jù)的格式 如:inputmask=9999表示文本框中內(nèi)容為數(shù)字,參見表9-13 注意設(shè)置數(shù)據(jù)環(huán)境.設(shè)置完所有控件的屬性后,在表單 上單擊鼠標右鍵,彈出“表單”快捷菜單,選擇“數(shù)據(jù)環(huán)境”,進 入“數(shù)據(jù)環(huán)境設(shè)計器”窗口,選擇要綁定的數(shù)據(jù)表文件,添加 到當前表單中.(即確定控件與數(shù)據(jù)表之間的聯(lián)系),表8.14 模式符號及其功能,X 允許輸入任何字符,【例】利用文本框輸入圓的半徑,計算出圓的面積。,設(shè)計步驟如下: 建立應(yīng)

7、用程序用戶界面。 設(shè)置對象屬性。, 編寫程序代碼。 編寫Command1的Click事件代碼: a = THISFORM.Text1.Value THISFORM.Text2.Value = ROUND(a2 * 3.14,2),【例8.7】設(shè)計一個用文本框輸入密碼的演示程序。表單的設(shè)計界面和運行結(jié)果分別如圖8.21和圖8.22所示。, 啟動“窗體設(shè)計器”窗口,創(chuàng)建一個新表單。 在表單的合適位置添加Labell標簽、Textl文本框和Command1、Command2、Command3命令按鈕。 設(shè)置表單及各控件的有關(guān)屬性,具體內(nèi)容如表8.16所示。, 編寫Commandl命令按鈕的Click

8、事件代碼: IF ThisForm.Text1.Value=123 = Messagebox(密碼正確!, 48 , 提示信息) ELSE ThisForm.Text1.Setfocus = Messagebox(對不起,密碼錯誤! , 48 , 提示信息) ENDIF 編寫Command2命令按鈕的Click事件代碼: ThisForm.Text1.Value= ThisForm.Text1.SetFocus ThisForm.Refresh 編寫Command3命令按鈕的Click事件代碼: ThisForm.Release,【例8.8】設(shè)計一個按學(xué)號查詢學(xué)生信息的表單。輸入一個學(xué)號,如果

9、stud表中存在該學(xué)號,則以標簽的形式輸出相應(yīng)的學(xué)生信息,否則給出該學(xué)號不存在的提示。表單的設(shè)計界面和運行結(jié)果分別如圖8.23和圖8.24所示。, 啟動“窗體設(shè)計器”窗口,創(chuàng)建一個新表單。 打開表單的“數(shù)據(jù)環(huán)境設(shè)計器”窗口,添加stud表。 在表單的合適位置添加Label1、Label2標簽控件和Textl文本框 定義表單及各控件的有關(guān)屬性,具體內(nèi)容見表8.17。, 編寫Textl文本框的Click事件代碼: This.Value= Thisform.Label2.Caption= 編寫Textl文本框的Valid事件代碼: LOCATE FOR 學(xué)號 = ALLTRIM(This.value

10、) IF FOUND() IF 是否團員 Thisform.Label2.caption=該同學(xué)名為+姓名+,是+ALLTRIM(班級)+; 的一名+性別+生,共青團員 ELSE Thisform.Label2.caption=該同學(xué)名為+姓名+,是+ALLTRIM(班級)+; 的一名+性別+生 ENDIF ELSE = MESSAGEBOX(您輸入的學(xué)號不存在!) ENDIF,求兩數(shù)之和,猜數(shù)(任意產(chǎn)生010之間的一個數(shù)),編輯框控件主要用來編輯較長的字符型字段和備注型字段,也可用來編輯多段落的純文本文件。在編輯過程中能夠自動換行,可用鍵盤上的光標移動鍵、翻頁鍵以及編輯框中的滾動條來定位光標

11、或滾動編輯框中的文本。,四、 編輯框,【例8.9】設(shè)計一個可以修改stud表中“特長”字段內(nèi)容的表單。 在第1個文本框中輸入一個學(xué)號,在stud表中找不到該學(xué)號時,給出相應(yīng)的提示信息讓用戶重新輸入;若找到相應(yīng)記錄,則在表單中顯示出姓名和特長的內(nèi)容,單擊“修改”按鈕即可進入修改特長的狀態(tài),“修改”按鈕上的文字變成“保存修改”。特長內(nèi)容被修改后,既可保存修改結(jié)果,也可選擇放棄。表單的設(shè)計界面和運行結(jié)果分別如圖8.25和圖8.26所示。, 啟動“窗體設(shè)計器”窗口,創(chuàng)建一個新表單。 打開表單的“數(shù)據(jù)環(huán)境設(shè)計器”窗口,將stud表添加到數(shù)據(jù)環(huán)境設(shè)計器中。 在表單上設(shè)置Label1、Label2、Labe

12、l3標簽,Textl、Text2文本框,Edit1編輯框,Commandl、Command2、Command3命令按鈕 設(shè)置表單及各控件的有關(guān)屬性,具體內(nèi)容見表8.19。, 分別編寫表單及各控件的事件代碼。 Form1表單的Init事件代碼如下: PUBLIC Editval SELECT stud GO Bottom SKIP This.Text1.Setfocus() Thisform.Edit1.Enabled=.F. This.Refresh Textl文本框的Valid事件代碼如下: LOCATE For學(xué)號=ALLTRIM(This.Value) IF FOUND() Thisfo

13、rm.Command1.Enabled=.T. Thisform.Refresh ELSE =MESSAGEBOX(您輸入的學(xué)號不存在,請重新輸入!) This.Value= RETURN 0 ENDIF,Textl文本框的GotFocus事件代碼如下: This.Value= GO Bottom SKIP Thisform.Refresh Thisform.Command1.Enabled=.F. Thisform.Command2.Enabled=.F. “修改”(Commandl)按鈕的Click事件代碼如下: IF This.Caption=修改 Thisform.Text1.Enab

14、led=.F. This.caption=保存修改 Thisform.Command2.Enabled=.T. Thisform.Edit1.Enabled=.T. Thisform.Edit1.Setfocus() Editval=Thisform.Edit1.Value ELSE Thisform.Text1.Enabled=.T. This.Caption=修改 Thisform.Command2.Enabled=.F. Thisform.Edit1.Enabled=.F. ENDIF,“放棄”(Command2)按鈕的Click事件代碼如下: Thisform.Edit1.Value=

15、Editval Thisform.Command1.caption=修改 This.Enabled=.F. Thisform.Edit1.Enabled=.F. Thisform.Text1.Enabled=.T. Thisform.Command1.Setfocus() “退出”(Command3)按鈕的Click事件代碼如下: Thisform.Release,選項按鈕組是包含多個選項按鈕的容器對象 是一組相互排斥的選項按鈕,即單選 Buttoncount屬性指定按鈕數(shù) Value屬性指示單擊選項按鈕的序號 若控件綁定的數(shù)據(jù)源為數(shù)值型字段,則將按鈕的順序號設(shè)置為該字段的值;若數(shù)據(jù)源為字符型

16、字段,則將按鈕的標題文本設(shè)置為該字段的值;若選項按鈕組控件未綁定任何數(shù)據(jù)源,選中某個按鈕后,則將該按鈕的順序號定義為該控件的值(Value)。 選項按鈕組控件和其中每個選項按鈕都可獨立定義自己的Click事件。各個按鈕的Click事件優(yōu)先。 用鼠標右鍵單擊選項按鈕組,在彈出的快捷菜單中執(zhí)行“編輯”命令,才能選中其中的某個按鈕,為其定義屬性或事件。,五、選項按鈕組,常用事件: 一是當創(chuàng)建控件時發(fā)生的Init事件, 二是當用戶單擊該控件時發(fā)生的Click事件, 三是當用戶使用鍵盤或鼠標更改了控件的值時發(fā)生的InteractiveChange事件。,【例8.10】修改myclass3.scx表單,用

17、選項按鈕組控件顯示和修改學(xué)生記錄中的“性別”字段值。修改后表單的設(shè)計界面和運行界面如圖8.27和圖8.28所示。, 打開myclass3.scx表單,出現(xiàn)該表單的“窗體設(shè)計器”窗口。 刪除表單中原有的“性別”文本框,在原位置處添加一個選項按鈕組控件OptionGroupl。 利用控件生成器重新設(shè)置控件的相關(guān)屬性:右擊選項按鈕組控件,在打開的快捷菜單中,單擊“生成器”命令,打開“選項按鈕組生成器”對話框。 調(diào)整控件所含的按鈕個數(shù),在表格中重新設(shè)置各選項按鈕的標題(Caption)屬性,如圖9.36所示。 進入“布局”選項卡,選擇“按鈕布局”為“水平排列”,如圖9.37所示 進入“值”選項卡,單擊

18、“字段”下拉列表框右側(cè)按鈕,展開下拉列表,選中綁定到該控件上的數(shù)據(jù)源“stud.性別”,設(shè)置控件ControlSource屬性的屬性值。 單擊“確定”按鈕返回該表單的“窗體設(shè)計器”窗口,保存表單的修改結(jié)果,關(guān)閉“窗體設(shè)計器”窗口。,【例】利用圖形選項組控制文本的對齊方式與字體,如圖所示。,選項組的圖形方式,設(shè)計步驟如下: 建立應(yīng)用程序用戶界面。選擇新建表單,進入表單設(shè)計器,增加一個文本框控件Text1、3個標簽控件Label1Label3和兩個選項按鈕組OptionGroup1OptionGroup2。 設(shè)置對象屬性。, 編寫程序代碼。 編寫表單的Activate事件代碼: THIS.Text

19、1.SetFocus 編寫OptionGroup1的Click事件代碼: n = THIS.Value DO CASE CASE n = 1 THISFORM.Text1.Alignment = 0,CASE n = 2 THISFORM.Text1.Alignment = 2 CASE n = 3 THISFORM.Text1.Alignment = 1 ENDCASE 編寫OptionGroup2的Click事件代碼: n = THIS.Value DO CASE CASE n = 1 THISFORM.Text1.FontName = 宋體 CASE n = 2 THISFORM.Tex

20、t1.FontName = 隸書 CASE n = 3 THISFORM.Text1.FontName = 黑體 CASE n = 4 THISFORM.Text1.FontName = 楷體_GB2312 ENDCASE,一次添加一組命令按鈕。 對于命令按鈕組控件,既可以獨立操作其中的某個命令按鈕,也可以將這些命令按鈕視為一個整體進行操作。 與選項按鈕組控件類似,命令按鈕組控件和其中的每個命令按鈕都可以獨立定義自己的Click事件。如果分別定義了各個按鈕的Click事件,則按鈕組的Click事件將不起作用。如果其中的某個命令按鈕沒有定義Click事件,單擊該按鈕時將引發(fā)其所屬命令按鈕組的Cl

21、ick事件。 運行表單時,當單擊了命令按鈕組中的某個命令按鈕時,會改變命令按鈕組控件的當前值(Value),該值即為所擊按鈕在按鈕組中的順序號。也就是說,如果單擊了按鈕組中的第1個按鈕,則按鈕組控件的值即為1。,六、 命令按鈕組,設(shè)計時選中該控件后也只能定義整個按鈕組的屬性及事件。 若要定義其中某個命令按鈕的屬性或事件,必須用鼠標右擊此控件,在彈出的快捷菜單中執(zhí)行“編輯”命令,才能選中某個命令按鈕設(shè)置其屬性和事件程序。,【例8.11】修改myclass3.scx表單,在原有基礎(chǔ)上再添加兩個命令按鈕“首記錄”和“尾記錄”,進一步完善按鈕的Click事件代碼,保證當記錄指針指向表文件頭時“首記錄”

22、和“前一記錄”按鈕變成無效的灰色狀態(tài),不再響應(yīng)用戶的事件;當記錄指針指向表文件尾時,“尾記錄”和“下一記錄”按鈕也不再響應(yīng)用戶的事件。刪除原有的命令按鈕,用命令按鈕組完成上述功能。修改后表單的設(shè)計界面和運行界面如圖8.32和圖8.33所示。, 打開myclass3.scx表單文件,出現(xiàn)該表單的“窗體設(shè)計器”窗口。 刪除原命令按鈕,在表單的合適位置添加CommandGroup1命令按鈕組。 定義按鈕組控件的有關(guān)屬性,具體內(nèi)容如表8.23所示。, 分別編寫表單及各命令按鈕的事件代碼。 Forml表單的Init事件代碼如下: SELECT stud GO Top Tmand2.Enabled=.F.

23、 Tmand1.Enabled=.F. Thisform.Refresh “首記錄”(Command1)按鈕的Click事件代碼如下: SELECT stud GO Top ThisForm.CommandGroup1.Command1.Enabled=.F. ThisForm.CommandGroup1.Command2.Enabled=.F. ThisForm.CommandGroup1.Command3.Enabled=.T. ThisForm.CommandGroup1.Command4.Enabled=.T. Thisform.Refresh,“前一記錄”(Command2)按鈕的C

24、lick事件代碼如下: SELECT stud SKIP -1 ThisForm.CommandGroup1.Command3.Enabled=.T. ThisForm.CommandGroup1.Command4.Enabled=.T. IF BOF() GO Top ThisForm.CommandGroup1.Command1.Enabled=.F. ThisForm.CommandGroup1.Command2.Enabled=.F. ENDIF Thisform.Refresh,“下一記錄”(Command3)按鈕的Click事件代碼如下: SELECT stud SKIP This

25、Form.CommandGroup1.Command1.Enabled=.T. ThisForm.CommandGroup1.Command2.Enabled=.T. IF EOF() Go Bottom ThisForm.CommandGroup1.Command3.Enabled=.F. ThisForm.CommandGroup1.Command4.Enabled=.F. ENDif Thisform.Refresh “尾記錄”(Command4)按鈕的Click事件代碼如下: SELECT stud Go Bottom ThisForm.CommandGroup1.Command1.E

26、nabled=.T. ThisForm.CommandGroup1.Command2.Enabled=.T. ThisForm.CommandGroup1.Command3.Enabled=.F. ThisForm.CommandGroup1.Command4.Enabled=.F. Thisform.Refresh,復(fù)選框控件只有兩個值,當用戶選中控件使其選框中出現(xiàn)對號時,它的值為邏輯值真,否則即為邏輯值假,因此常用來定義對象的某個可選項是否有效。 可將數(shù)據(jù)表中的邏輯型字段指定為它的數(shù)據(jù)源。若當前記錄的字段值為.T.,則在復(fù)選框中顯示對號;若字段值為.F.,則復(fù)選框中不顯示對號;若字段值為N

27、ULL,則復(fù)選框顯示為灰色。,七、復(fù)選框,【例8.12】繼續(xù)修改myclass3.scx表單,在表單中添加一個復(fù)選框控件,用來顯示和設(shè)置stud表中“是否團員”邏輯型字段的值。修改后表單的設(shè)計界面和運行界面如圖8.34和圖8.35所示。, 打開myclass3.scx表單文件,出現(xiàn)該表單的“窗體設(shè)計器”窗口。 在表單的合適位置處添加一個Check1復(fù)選框控件。 將該控件的Caption屬性設(shè)置為“是否團員”,將它的ControlSource屬性設(shè)置為“stud.是否團員”。 保存表單的修改結(jié)果,【例】利用復(fù)選框來控制輸入或輸出文本的字體風(fēng)格。 設(shè)計步驟如下: 選擇新建表單,進入表單設(shè)計器,增加

28、一個形狀控件Shape1、一個文本框控件Text1、一個標簽控件Label1以及3個復(fù)選框控件Check1、Check2和Check3。 設(shè)置對象屬性。, 編寫事件代碼。 編寫表單的Activate事件代碼: THIS.Text1.SetFocus 編寫Check1的Click事件代碼: THISFORM.Text1.FontBold = THIS.Value 編寫Check2的Click事件代碼: THISFORM.Text1.FontItalic = THIS.Value 編寫Check3的Click事件代碼: THISFORM.Text1.FontUnderLine = THIS.Val

29、ue,【例】圖形按鈕形式的復(fù)選框,如圖所示。單擊鎖定按鈕關(guān)閉其他復(fù)選框,單擊修改按鈕則開放其他復(fù)選框。 設(shè)計步驟如下: 選擇新建表單,進入表單設(shè)計器,首先增加一個形狀控件Shape1,然后在其上增加一個文本框控件Text1、一個標簽控件Label1以及5個復(fù)選框控件Check1、Check2、Check3、Check4和Check5。 修改控件屬性。,復(fù)選框的圖形按鈕方式, 編寫事件代碼。 編寫Check1的Click事件代碼: THISFORM.Text1.FontBold = THIS.Value 編寫Check2的Click事件代碼: THISFORM.Text1.FontItalic

30、= THIS.Value 編寫Check3的Click事件代碼: THISFORM.Text1.FontUnderLine = THIS.Value 編寫Check4的Click事件代碼: THISFORM.Text1.FontStrikethru = THIS.Value 編寫Check5的Click事件代碼: THISFORM.SetAll(Enabeld,THIS.Value,CheckBox) THIS.Enabeld=.T. THIS.Caption=IIF(THIS.Value=1,R 鎖定,R 修改),列表框控件是個可滾動顯示的項目列表,用戶可從預(yù)先提供的列表項中選定某項信息作為

31、用戶所需要的數(shù)據(jù)內(nèi)容。當某項數(shù)據(jù)的允許取值僅為固定的若干項時,常常用它在表單中為用戶設(shè)置一種靈活方便的選擇式錄入數(shù)據(jù)的環(huán)境。,八、列表框,列表框控件的常用方法 AddItem方法將指定表達式的值添加到列表框控件的項目列表中。 【格式】列表框名稱.AddItem() RemoveItem方法從列表框控件中移去指定列表項。 【格式】列表框名稱.RemoveItem() 【說明】只有當列表框的數(shù)據(jù)項來源類型(RowSourceType)定義為“0-無”、“1-值”和“8-結(jié)構(gòu)”的情況下,才能對其實施添加或移去列表項的操作。 Requery方法在列表框控件的數(shù)據(jù)項來源發(fā)生變化的情況下,重新查找并更新列

32、表框中的數(shù)據(jù)項內(nèi)容,使列表框中的顯示結(jié)果與數(shù)據(jù)項來源的最新狀態(tài)一致。 【格式】控件名稱.Requery(),列表框的常用事件 Click(單擊)、DblClick(雙擊)和通過鼠標或鍵盤操作使列表框的當前值發(fā)生變化的InteractiveChange事件。,【例8.13】設(shè)計一個查詢學(xué)生單科成績的表單,設(shè)計界面如圖8.36所示。運行表單時,在“學(xué)生姓名”列表中選中一個學(xué)生姓名,即可在“已選修的課程”列表中自動顯示該學(xué)生選修過的所有課程,在“已選修的課程”列表中選中一個課程名稱,即可在相應(yīng)的文本框中顯示此學(xué)生該門課程的成績情況。表單的運行結(jié)果如圖8.37所示。, 啟動“窗體設(shè)計器”窗口,創(chuàng)建一個

33、新表單。 打開表單的“數(shù)據(jù)環(huán)境設(shè)計器”窗口,將stud表、sc表和course表添加到數(shù)據(jù)環(huán)境設(shè)計器中。 在表單的合適位置添加Label1、Label2、Label3標簽,Listl、List2列表框、Textl文本框和Command1命令按鈕。 定義表單及各控件的有關(guān)屬性,具體內(nèi)容見表8.27。, 將所有標簽控件的AutoSize屬性均置為.T.。 編寫列表框控件的事件代碼。 List1列表框的InteractiveChange事件代碼如下: Thisform.List2.Rowsource = ; Select 課程名 From stud, sc, course Where stud.學(xué)號

34、 = sc.學(xué)號; And sc.課程號 = course.課程號 And 姓名=This.Value Into Cursor Lsb Thisform.List2.Listindex=0 Thisform.Text1.Value= List2列表框的InteractiveChange事件代碼如下: SELECT 成績 From stud a, sc b ,course c Where a.學(xué)號=b.學(xué)號 ; And b.課程號 = c.課程號 And 姓名 = Thisform.List1.Value ; And 課程名 = This.Value Into Array Ss Thisform

35、.Text1.Value=Ss(1) Command1命令按鈕的Click事件代碼如下: Thisform.Release 保存表單,定義表單文件名為8-12.scx。,【例】求從2000年到2100年之間的所有閏年。 據(jù)此,畫出求閏年的流程圖,如圖所示。 設(shè)計步驟如下: 選擇新建表單,進入表單設(shè)計器,首先增加一個形狀控件Shape1,然后在其中畫上一個列表框控件List1、一個標簽控件Label1和一個命令按鈕Command1。List1的屬性使用默認的設(shè)置,只需修改字體的大小屬性,其他控件的屬性設(shè)置參見圖。, 編寫命令按鈕Command1的Click事件代碼為: THISFORM.List

36、1.Clear FOR n = 2000 TO 2100 IF n % 4 = 0 IF n % 100 != 0 OR n % 400 = 0 L = 1 ELSE L = 0 ENDIF ELSE L = 0 ENDIF IF L = 1 THISFORM.List1.AddItem(ALLT(STR(n) ENDIF ENDFOR,設(shè)計步驟如下: 選擇“新建”表單,進入表單設(shè)計器。 設(shè)置對象屬性,見表。,【例】利用循環(huán)結(jié)構(gòu)和列表框控件,設(shè)計一個“選項移動”表單。, 編寫事件代碼。 編寫容器控件Container1的Init事件代碼: THIS.List1.AddItem (one) TH

37、IS.List1.AddItem (two) THIS.List1.AddItem (three) THIS.List1.AddItem (four) THIS.List1.AddItem (five) THIS.List1.AddItem (six) THIS.List1.AddItem (seven) THIS.List1.AddItem (eight) THIS.List1.AddItem (nine) THIS.List1.AddItem (ten),編寫容器控件中命令按鈕組CommandGroup1的Click事件代碼: DO CASE CASE THIS.Value = 1 & 單

38、擊“”按鈕i = 0 DO WHILE i = THIS.Parent.List1.ListCount& 反復(fù)循環(huán)選取 IF THIS.Parent.List1.Selected(i) THIS.Parent.List2.Additem THIS.Parent.list1.List(i) THIS.Parent.List1.RemoveItem(i) ELSE i = i + 1 ENDIF ENDDO,CASE THIS.Value = 2& 單擊“”按鈕 DO WHILE THIS.Parent.List1.ListCount 0 THIS.Parent.List2.AddItem(THI

39、S.Parent.List1.List(1) THIS.Parent.List1.RemoveItem(1) ENDDO CASE THIS.Value = 3 i = 0 DO WHILE i 0 THIS.Parent.List1.AddItem(THIS.Parent.List2.List(1) THIS.Parent.List2.RemoveItem(1) ENDDO ENDCASE,IF THIS.Parent.List2.ListCount 0 THIS.Command3.Enabled =.T. THIS.Command4.Enabled =.T. ELSE THIS.Comma

40、nd3.Enabled =.F. THIS.Command4.Enabled =.F. ENDIF IF THIS.Parent.List1.ListCount = 0 THIS.Command1.Enabled =.F. THIS.Command2.Enabled =.F. ELSE THIS.Command1.Enabled =.T. THIS.Command2.Enabled =.T. ENDIF THISFORM.Refresh,組合框控件組合了列表框和文本框功能。它與列表框有許多共同之處,但在一般狀態(tài)下只顯示文本框而不顯示列表框,當單擊組合框右側(cè)的下三角按鈕時才展開選項列表,利用組合

41、框的這種下拉特性可以節(jié)省表單的可用空間。 組合框有下拉組合框和下拉列表框兩種類型。 下拉組合框允許通過鍵盤直接輸入值,下拉列表框只能從下拉列表中選取值。,九、組合框,組合框的常用屬性 組合框控件除了不具有列表框的MoverBars和Multiselect屬性以外,其他常用屬性與列表框基本一樣,具體內(nèi)容見表9.24。組合框控件有一個列表框控件不具備的Style屬性,它用來指定組合框的類型是下拉列表框還是下拉組合框。 (2) 組合框的常用事件與方法 組合框的主要常用事件有Click(單擊)事件和通過鼠標或鍵盤操作使組合框的當前值發(fā)生變化的InteractiveChange事件。 組合框的常用方法與

42、列表框相同。,【例8.14】繼續(xù)修改myclass3.scx表單,用組合框控件顯示和設(shè)置“班級”字段的值。修改后表單的設(shè)計界面和運行界面如圖8.38和圖8.39所示。, 打開myclass3.scx表單,出現(xiàn)該表單的“窗體設(shè)計器”窗口。 刪除表單中原有的“txt班級”文本框,在原位置處添加一個Combo1組合框控件。 按表8.28所列的內(nèi)容,設(shè)置Combo1組合框控件的相關(guān)屬性。 表8.28 Combo1組合框控件的有關(guān)屬性值, 保存表單的修改結(jié)果。,【例】在文本框輸入數(shù)據(jù),按回車添加到列表框中,在列表框中選定項目,右擊后可以移去選定項,如圖示。,設(shè)計步驟如下: 選擇新建表單,進入表單設(shè)計器,

43、首先增加一個形狀Shape1,然后,在其中增加一個文本框Text1、一個組合框Combo1以及兩個標簽Label1Label2。 設(shè)置Combo1的Style屬性為2 下拉列表框,其他控件的屬性設(shè)置略。 編寫代碼。,1. 下拉列表框,編寫表單的Activate事件代碼: PUBLIC a a = 1 THIS.Text1.SetFocus 編寫Text1的KeyPress事件代碼: LPARAMETERS nKeyCode, nShIFtAltCtrl IF nKeyCode = 13 IF !EMPTY(THIS.Value) THISFORM.Combo1.AddItem (THIS.Va

44、lue) THISFORM.Combo1.DisplayValue = THIS.Value ENDIF THIS.SelStart = 0 THIS.SelLength = LEN(RTRIM(THIS.Text) a = 0 ENDIF,編寫Text1的Valid事件: IF a = 1 RETURN .T. ELSE a = 1 RETURN 0 ENDIF 編寫Combo1的RightClick事件代碼: IF THIS.ListIndex 0 THISFORM.Text1.Value = THIS.List(THIS.ListIndex) THIS.RemoveItem (THIS.

45、ListIndex) THIS.Value = 1 *將第一項顯示在文本框中 ENDIF,【例】在上例中使用下拉組合框來代替文本框和列表框,實現(xiàn)同樣的功能:輸入數(shù)據(jù),按Enter鍵后可添加到列表中,在列表中選定項目,單擊鼠標右鍵可移去選定項,如圖所示。,設(shè)計步驟如下: 表單界面的設(shè)計與控件屬性的設(shè)置參見圖。,2. 下拉組合框, 編寫代碼。 編寫Combo1的KeyPress事件代碼: LPARAMETERS nKeyCode, nShiftAltCtrl IF nKeyCode = 13 IF !EMPTY(THIS. DisplayValue) THIS.AddItem (THIS.Disp

46、layValue) THISFORM.Text1.Value = THIS.ListCount ENDIF THIS.SelStart = 0 THIS.SelLength = LEN(ALLT(THIS.Text) THIS.Tag = N ENDIF RightClick事件: IF THIS.ListCount 0 THIS.RemoveItem (THIS.ListIndex) THIS.Value = 1 THISFORM.Text1.Value = THIS.ListCount ENDIF,Valid事件: IF THIS.Tag = Y RETURN .T. ELSE THIS.

47、Tag = Y RETURN 0 ENDIF,【例】“簡易抽獎機”,在組合框中輸入號碼。按下“開始”按鈕后,組合框中將不停變換隨機得到的號碼。單擊“停止”按鈕,號碼停止變動,并得到中獎的號碼,如圖。,設(shè)計步驟如下: 表單界面的設(shè)計與控件屬性的設(shè)置參見圖6-19。在窗體中增加一個計時器控件Timer1,并將其Interval屬性改為:50,Enabled屬性改為:False。, 編寫代碼。 編寫Combo1的KeyPress事件代碼:LPARAMETERS nKeyCode, nShiftAltCtrl DO CASE CASE nKeyCode = 13 IF !EMPTY(THIS.Disp

48、layValue) THIS.AddItem (THIS.DisplayValue) THISFORM.Text1.Value = THIS.ListCount ENDIF THIS.SelStart = 0 THIS.SelLength = LEN(ALLT(THIS.Text) THIS.Tag = N CASE nKeyCode = 27 & 按Esc鍵后可以移去選項 IF THIS.ListCount 0 THIS.RemoveItem (THIS.ListIndex) THIS.Value = 1,THISFORM.Text1.Value = THIS.ListCount ENDIF

49、 ENDCASE Valid事件: IF THIS.Tag = Y RETURN .T. ELSE THIS.Tag = Y RETURN 0 ENDIF,編寫命令按鈕Command1的Click事件代碼: THISFORM.Timer1.Enabled = .NOT.(THISFORM.Timer1.Enabled) a = 按“停止”按鈕,可得中獎號碼 b = 中獎號碼是: + THISFORM.Combo1.Text IF THISFORM.Timer1.Enabled THIS.Caption = 停止(S) THISFORM.Label1.Caption = a ELSE THIS.

50、Caption = 開始(S) THISFORM.Label1.Caption = b ENDIF,編寫計時器控件Timer1的Timer事件代碼,使之可以隨機地抽取獎號: n = THISFORM.Text1.Value a = INT(RAND() * n) + 1 THISFORM.Combo1.ListIndex = a,表格(Grid)控件是一個容器對象,它由若干個列(Column)構(gòu)成,每個列又包含一個標頭(Header)控件和若干文本框控件。每個控件都可以有自己的屬性、事件和方法。 由于它可以同時顯示出表中的多個字段和多條記錄,因此常用來設(shè)計一對多表單。,十、 表格,表單中的可用

51、空間是有限的,當表單中需要顯示的項目很多而無法容納時,利用頁框控件是個很好的解決辦法。 頁框(Pageframe)控件是可以包含多個頁面(Page)的容器對象,其中的每個頁面又可包含多個控件。在運行表單時,只顯示一個頁面中的內(nèi)容,可以通過單擊頁面的選項卡標題或單擊自定義的換頁按鈕實現(xiàn)多個頁面間的切換。,十一、頁框,常見屬性: Pagecount:一個頁框?qū)ο笏捻搶ο蟮臄?shù)量(099)。 Pages:用于存取頁框中的某個頁對象的數(shù)組。運行時可用 若將頁框mypageframe中第2頁的caption屬性設(shè)為“列表項”,thisform.mypageframe.pages(2).caption

52、= “列表項” Tabs:指定頁框中是否顯示頁面標簽欄,默認為.t. Tabstretch:頁面標題文本太長,無法在指定寬度的頁框內(nèi)顯示出來,取值0表明可根據(jù)需要分幾行顯示,所有文本都顯示;取值1時(默認),單行顯示,多余的被截取。 Activepage:頁框中活動頁的頁號,可使指定頁成為活動的,常見方法: Zorder方法,它的功能是把指定的頁置于頁框的最上層。,【例】在表單中設(shè)計一個帶選項卡的頁框架,其中有3個頁面,分別放上一些不同的控件。,設(shè)計步驟如下: 選擇新建表單,進入表單設(shè)計器,首先增加一個頁框架控件PageFrame1,并修改其PageCount屬性為:3,頁框架上出現(xiàn)3個頁面。

53、 用鼠標右鍵單擊頁框架控件,在彈出的快捷菜單中選擇“編輯”,激活頁框架。開始編輯第一頁,將Page1的Caption屬性改為:歡迎。然后在Page1上增加一個標簽Label1和一個形狀控件。修改其屬性,如圖所示。,1. 帶選項卡的頁框架, 用鼠標單擊Page2,或在屬性對話框中選擇PageFrame1的Page2對象,開始編輯第二頁。將Page2的Caption屬性改為日期。然后,在Page2上增加一個文本框Text1、一個標簽Label1和一個形狀控件。并修改屬性。, 用鼠標單擊Page3,或在屬性對話框中選擇PageFrame1的Page3對象,開始編輯第三頁。將Page3的Caption

54、屬性改為:時間。然后,在Page3上增加一個文本框Text1、一個形狀控件Shape1、一個計時器Timer1和兩個標簽控件Label1、Label2。并修改其屬性,如圖所示。設(shè)置Timer1的Interval屬性為1000。, 編寫事件代碼。 編寫第二頁中Timer1的Timer事件代碼: IF HOUR(DATETIME() = 12 THIS.Parent.Label1.Caption = 下午 ELSE THIS.Parent.Label1.Caption = 上午 ENDIF IF HOUR(DATETIME() 12 hh = HOUR(DATETIME() 12 ELSE hh

55、= HOUR(DATETIME() ENDIF THIS.Parent.Text1.Value = STR(hh) + SUBSTR(TIME(),3),【例】將上例中的頁框架改為不帶選項卡的形式,使用選項按鈕組控制頁面的選擇。如圖所示,6.3.2 不帶選項卡的頁框架,設(shè)計步驟如下(在上例的基礎(chǔ)上進行修改,只給出修改的部分)。 選擇“打開”表單文件,進入表單設(shè)計器,修改頁框架控件PageFrame1的Tabs屬性為.F. 假,頁框架改為不帶選項卡的形式。然后,增加一個“選項按鈕組”控件OptionGroup1,并修改其各項屬性。 編寫事件代碼。 編寫OptionGroup1中日期按鈕(Opti

56、on1)的Click事件代碼: THISFORM.PageFrame1.Page1.Zorder 編寫OptionGroup1中時間按鈕(Option2)的Click事件代碼: THISFORM.PageFrame1.Page2.Zorder,編寫OptionGroup1中計算器按鈕(Option3)的Click事件代碼: THISFORM.PageFrame1.Page3.Zorder 說明:在按鈕Option1的Click事件代碼中THISFORM.PageFrame1.Page1.Zorder表示第一頁被放置在最前面。,【例】在上例中使用命令按鈕組控制頁面的選擇。如圖所示。,設(shè)計步驟如下

57、(在上例的基礎(chǔ)上進行修改)。 選擇“打開”表單文件,進入表單設(shè)計器,刪去選項按鈕組控件OptionGroup1,增加一個“命令按鈕組”控件CommandGroup1,并修改其屬性。其中命令按鈕組中的按鈕Command1和Command2的Enabled屬性改為.F. 假,參見圖所示。, 編寫命令按鈕組CommandGroup1的Click事件代碼: n = THIS.Value k = THISFORM.PageFrame1.ActivePage DO CASE CASE n=1 THISFORM.PageFrame1.Pages(1).Zorder CASE n=2 THISFORM.Pag

58、eFrame1.Pages(k-1).Zorder CASE n=3 THISFORM.PageFrame1.Pages(k+1).Zorder CASE n=4 THISFORM.PageFrame1.Pages(3).Zorder ENDCASE,k = THISFORM.PageFrame1.ActivePage THIS.Command1.Enabled = IIF(k = 1, .F., .T.) THIS.Command2.Enabled = IIF(k = 1, .F., .T.) THIS.Command3.Enabled = IIF(k = 3, .F., .T.) THIS

59、.Command4.Enabled = IIF(k = 3, .F., .T.),1. 使用形狀 2. 使用容器控件 其中包含控件的Top和left屬性相對于容器控件而言,【例】設(shè)計一個華氏溫度和攝氏溫度互相轉(zhuǎn)換的程序。輸入一個華氏溫度可以得到相應(yīng)的攝氏溫度,而輸入一個攝氏溫度則可以得到其相應(yīng)的華氏溫度。 分析:攝氏溫度與華氏溫度的關(guān)系為: 華氏 = 攝氏 * 9 / 5 + 32 由此可得: 攝氏 =(華氏 32)* 5 / 9。 設(shè)計步驟如下:,十二. 形狀與容器控件,編寫程序代碼。 編寫表單的Activate事件代碼: THIS.Container1.Text1.SetFocus 編寫Command1的Click事件代碼: c = THISFORM.Container1.Text1.Value THISFORM.Container2.Text1.Value = c * ( 9 / 5 ) + 32 編寫Command2的C

溫馨提示

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

最新文檔

評論

0/150

提交評論