第17-20用戶自定義事件-游標(biāo)_第1頁
第17-20用戶自定義事件-游標(biāo)_第2頁
第17-20用戶自定義事件-游標(biāo)_第3頁
第17-20用戶自定義事件-游標(biāo)_第4頁
第17-20用戶自定義事件-游標(biāo)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫管理系統(tǒng)

西南交通大學(xué)交通運(yùn)輸學(xué)院第17章用戶自定義事件PowerBuilder的窗口、控件、用戶對象等都有一組系統(tǒng)預(yù)先定義好的事件,打開與前面所述的某對象相關(guān)聯(lián)的代碼編輯器后,在事件列表框中就會看到這組事件。一般來說,這些系統(tǒng)預(yù)定義事件能夠滿足應(yīng)用程序的大多數(shù)需求。然而,有時候應(yīng)用程序需要某種特殊控制,有時候應(yīng)用程序需要在特定情況下執(zhí)行某段代碼,有時候應(yīng)用程序中對象間需要靈活的通訊,此時,開發(fā)人員可以根據(jù)需要為對象定義自己的事件,這類事件就稱做用戶事件。

在下列情況下經(jīng)常使用用戶事件:1.解決用戶對象與窗口之間的通訊問題。用戶事件可以通過參數(shù)進(jìn)行信息傳遞。2.響應(yīng)特殊操作,這些操作沒有相應(yīng)的PowerBuilder預(yù)定義事件。例如,我們希望用戶按下Enter鍵后將輸入焦點(diǎn)從一個單行編輯框移動到下一個單行編輯框(正常情況下需要按Tab鍵);再如,在數(shù)據(jù)窗口控件中,當(dāng)用戶將輸入焦點(diǎn)定位在最后一行后,再按↓或Enter鍵時插入一個空行等。

3.支持用戶通過多種方式完成同一個功能。例如,在更新數(shù)據(jù)庫時,應(yīng)用程序既允許用戶通過單擊窗口上的按鈕完成,也允許用戶通過選擇菜單項完成。使用用戶事件后,就只需要在一個地方編寫代碼,在需要使用該功能的地方觸發(fā)相應(yīng)的用戶事件就可以了。一、定義用戶事件事件是從屬于某個對象的,因此定義用戶自定義事件首先選定所在的對象,為窗口、控件、用戶對象定義用戶事件的方法都是一樣的,見書上。定義一個用戶事件通常包括三部分:1、事件名以u_或ue_開頭,定義事件后,該事件就以該名字出現(xiàn)在對象的事件列表中。2、事件號(eventID)用戶事件號以pbm_開頭。當(dāng)我們定義一個用戶定義事件時,事件號可以有三種取值:(1)WINDOWS系統(tǒng)自動觸發(fā)的事件。每個事件標(biāo)識都對應(yīng)于特定的Windows消息。我們可以從兩者相似的名字后半部推斷其對應(yīng)關(guān)系。例如,pbm_mousemove對應(yīng)于Windows消息wm_mousemove,pbm_keydown對應(yīng)于Windows消息wm_keydown。(2)Windows系統(tǒng)不會自動觸發(fā)的事件,這些事件只能通過代碼來觸發(fā)。其中pbm_custom01不對應(yīng)pbm_custom75任何WINDOWS的消息,相當(dāng)于WINDOWS的用戶事件WM_USER至WM_USER+74,不由系統(tǒng)觸發(fā)由用戶自己觸發(fā)。(3)事件號選為none表示無事件號。3、事件的參數(shù)及返回值。只有用戶事件的事件號選為none時才可以定義事件的參數(shù)及返回類型。二、使用用戶事件定義了用戶事件后,還需要完成下述工作才能使用用戶事件:1.編寫用戶事件的事件處理程序,沒有事件處理程序時,即使發(fā)生了該事件,應(yīng)用程序也不做任何處理。2、必要時編寫觸發(fā)用戶事件的代碼。如果用戶事件對應(yīng)于某個Windows消息(例如事件標(biāo)識為pbm_mousemove的用戶事件ue_mousemove對應(yīng)于Windows消息wm_mousemove),那么當(dāng)相應(yīng)動作在應(yīng)用程序上發(fā)生時,該事件將被自動觸發(fā)。如果用戶事件不對應(yīng)于任何Windows消息(也就是說事件號為none或pbm_custom01到bm_custom75),那么必須使用代碼觸發(fā)該事件。三、觸發(fā)用戶事件1、Object_name.triggerevent(event_name)Event_name可以對于系統(tǒng)以定義好的事件而言可以是枚舉類型Cb_1.triggerevent(clicked!)對于用戶自定義的事件應(yīng)是用戶事件的字符串dw_1.triggerevent(“ue_keydown”)2、Object_name.postevent(event_name)該函數(shù)的用法與triggerevent()相同不同之處在于triggerevent()表示立即觸發(fā)該事件postevent()將事件放入消息隊列的尾部以上兩個函數(shù)處理的事件都不能帶參數(shù)。3、Object_name.[trigger|post][static|dynamic]eventevent_name(para_)1)Trigger與post只能選擇一個,缺省狀態(tài)下是trigger2)static與dynamic只能選擇一個,缺省狀態(tài)下是staticstatic是靜態(tài)連接,編譯時事件必須存在,否則編譯通不過。Dynamic指動態(tài)連接,編譯時事件可以不存在,在運(yùn)行時檢查事件是否存在帶參數(shù)的事件只能這樣觸發(fā)Cb_1.eventclicked()Cb_1.triggerevent(clicked!)W_1.eventu_display(4,”math”)四、編程實例P174在cb_append的clicked事件中l(wèi)ongrowrow=dw_1.insertrow(0)dw_1.setrow(row)dw_1.scrolltorow(row)dw_1.setfocus()2.在cb_append中定義一個用戶事件,事件號為pbm_keydownifkeydown(keyenter!)then this.triggerevent(clicked!)endif其余控件和cb_append的思路相同3、在dw_1中定義一個用戶自定義事件u_keyenter,事件號為pbm_dwnprocessenter,當(dāng)焦點(diǎn)落到該控件上時,按回車鍵將觸發(fā)u_keyenter。IntcolLongrow//得到當(dāng)前的行號row=getrow()//得到當(dāng)前的列號col=getcolumn()ifcol<9then setcolumn(col+1)else//當(dāng)前行不是最后一行 ifrow<this.rowcount()then setrow(row+1)//將下一行當(dāng)前列變?yōu)楫?dāng)前列 scrolltorow(row+1) setcolumn(1)else row=insertrow(0) setrow(row) scrolltorow(row) setcolumn(1)endifreturn14.在dw_1上定義下箭頭事件u_keyarrow事件號為pbm_dwntabdownout當(dāng)焦點(diǎn)落到該控件上最后一行時,按向下的箭頭觸發(fā)該事件.LongrowRow=insertrow(0)Setrow(row)Scrolltorow(row)第18章用戶自定義對象18.1用戶自定義對象概述用戶對象是封裝了一組相關(guān)代碼和屬性、完成特定功能的對象。用戶對象一般用于完成通用的功能,例如,應(yīng)用程序可能經(jīng)常使用某個“關(guān)閉”按鈕執(zhí)行一組操作,之后關(guān)閉窗口;也可能經(jīng)常使用某個列表框列出所有的部門;還可能對所有的數(shù)據(jù)窗口控件使用相同的錯誤類型檢查;或許開發(fā)人員還想制作個文件瀏覽器,在需要時插入多個窗口中。我們可以根據(jù)自己的要求定義自己的用戶對象。無論什么時候,應(yīng)用程序需要某種反復(fù)使用的特性時,都應(yīng)該定義個用戶對象。用戶對象只需定義一次,就能夠反復(fù)多次使用,并且修改一次,就能把修改結(jié)果反映到所有使用該用戶對象的地方。下面我們就具體介紹如何在POWERBUILDER中定義和使用用戶對象。優(yōu)勢:避免在程序不同的地方編寫功能相同或相近的代碼可以把一組總在一起使用的可視控件組合在一起??梢园严嚓P(guān)的功能封裝在一起??梢酝卣鼓承?biāo)準(zhǔn)控件的功能。POWERBUILDER中有兩種用戶對象,:可視的用戶對象例如按紐、編輯框等類用戶對象,沒有屏幕表現(xiàn)形式,是不可視的用戶對象。用于封裝和完成一定的功能。例如,在幾個應(yīng)用程序中需要計算利息或完成某種統(tǒng)計,此時,可以定義相應(yīng)的類用戶對象。使用類用戶對象時,在代碼中創(chuàng)建該對象的實例,然后調(diào)用它的函數(shù)。下面我們先介紹可視用戶對象。18.2可視用戶對象所謂可視用戶對象就是可重用的具有某種行為的一個或一組控件??梢晫ο笥腥N:標(biāo)準(zhǔn)可視對象、定制的可視用戶對象、外部可視的用戶對象。1、標(biāo)準(zhǔn)類型的可視化用戶對象它是通過繼承一個標(biāo)準(zhǔn)類型的POWERBUILDER控件來定義的。標(biāo)準(zhǔn)可視用戶對象是對PowerBuilder現(xiàn)有控件的擴(kuò)充,它在現(xiàn)有控件基本功能的基礎(chǔ)上增加應(yīng)用程序需要的功能。標(biāo)準(zhǔn)可視用戶對象繼承了原始控件的各種特征,包括屬性、事件和函數(shù)。常用的標(biāo)準(zhǔn)可視用戶對象是繼承數(shù)據(jù)窗口控件,然后加上應(yīng)用程序所需的通用功能,比如在DBError事件中定義通用的數(shù)據(jù)庫訪問錯誤處理等。2、定制可視用戶對象定制可視用戶對象將多個控件以及可視用戶對象組合成一個整體,完成一定的功能和操作。放置到窗口上的定制可視用戶對象作為一個整體來使用,其類型為UserObject!。3、外部用戶對象外部可視用戶對象實際上就是在PowerBuilder應(yīng)用程序中使用其它語言(比如C或C++)編寫的控件,例如,可以購買個控件庫。使用外部控件的目的通常是為了完成PowerBuilder本身難以完成或不支持的功能。一、創(chuàng)建標(biāo)準(zhǔn)可視用戶對象

創(chuàng)建標(biāo)準(zhǔn)可視用戶對象的過程見書上。例:將在用戶自定義事件的例子中使用的按紐,改為用戶自定義對象。該按紐有一個共同的行為,就是當(dāng)焦點(diǎn)落在該按紐上,用戶打回車鍵,觸發(fā)該按紐的clicked事件。創(chuàng)建一個標(biāo)準(zhǔn)的可視用戶對象,該用戶對象是基于按紐的。1、創(chuàng)建一個用戶自定義事件u_keydown,事件號為pbm_keydown。2、為該事件編寫代碼ifkeydown(keyenter!)then this.triggerevent(clicked!)endif3.將該用戶自定義對象存為u_cmdbutton4.在窗口上放置該用戶自定義對象。在控件列表中選擇userobject選擇u_cmdbutton編寫代碼。二、創(chuàng)建定制可視用戶對象第19章高級窗口控件19.1列表框、圖片列表框、下拉列表框與下拉圖片列表框當(dāng)應(yīng)用程序只需要少數(shù)幾個選項時,使用單選鈕和/或復(fù)選框既簡單又方便。然而用戶的需求是多方面的,當(dāng)選項個數(shù)較多并且每次運(yùn)行都可能變化時,單選鈕、復(fù)選框就顯得力不從心了,這時我們可以使用列表方式為用戶提供多重選擇。

PowerBuilder提供了四個控件用于完成列表選擇:列表框、圖片列表框、下拉列表框和下拉圖片列表框,其中列表框是基礎(chǔ),其它列表控件均在列表框的基礎(chǔ)上進(jìn)行了某種擴(kuò)充。列表框列出一系列選項供用戶選擇;圖片列表框在列出選項的同時,每個選項前還能夠顯示一個小圖片;下拉列表框?qū)涡芯庉嬁蚺c列表框結(jié)合成一個整體;下拉圖片列表框則又進(jìn)一步,它不僅具有下拉列表框的功能,而且在每個選項前還可以放上一幅圖片。下面介紹各種列表框的功能和用法。這幾種控件的作用是相似的,都是提供用戶一組可選或可視的選項,允許用戶從中選擇一項或多項。用法和屬性也十分相似。

一、列表框(ListBox)在一個矩形框中顯示多行文本,通過設(shè)置屬性,程序可以控制同時允許用戶選擇一項還是多項。在典型的Windows應(yīng)用程序中,單擊列表框中的一項則選中該項,雙擊列表框中的一項則可進(jìn)行某種操作。1、屬性disablenoscroll:選中時,始終顯示滾動條extendedselect:允許用戶同時選中多個項目,支持鼠標(biāo)加ctrl和shift多項選中,或者拉出矩形選中框內(nèi)多項。Multiselect:允許用戶同時選中多個項目,但只能通過鼠標(biāo)單擊來選擇。如果同時選中這兩個選項,則與單獨(dú)選中復(fù)選框“ExtendedSelect”時的情況相同。如果在設(shè)計應(yīng)用程序時就已經(jīng)知道了列表框各選項,則可使用直接輸入法,否則就要通過編寫代碼來完成了。直接輸入列表框選項的步驟為:(1).單擊列表框?qū)傩栽O(shè)置對話框的“Items”標(biāo)簽;(2).在“Text”下的編輯框中依次鍵入列表框各選項2、函數(shù)動態(tài)增加、刪除列表框選項時需要編寫相應(yīng)的代碼。通??梢栽诖翱诘腛pen(打開)事件中編寫;此時需要調(diào)用列表框的對象函數(shù)AddItem()、InsertItem()、DeleteItem(),其調(diào)用方法為:(1)AddItem(item)//在列表框尾部增加列表項item(2)InsertItem(item,index)//在第index項前面插入列表項(3)DeleteItem(index)//刪除第index個列表項其中item是要添加或插入到列表框中的選項,用字符串表示;index代表第幾個選項,它是個整數(shù)。(4)state(integerindex)返回1該項被選中返回0該項沒有被選中(5)integerTotalSelected()返回選中的項數(shù)(6)integerTotalItems()返回列表框中的總項數(shù)(7)SetState(index,state)stateTRUE選中FALSE不選中 (8)stringText(index) 返回在列表框中第index項的值3、事件列表框有十幾個事件,包括常見的雙擊事件DoubleClicked、得到焦點(diǎn)事件GetFocus、失去焦點(diǎn)事件LoseFocus。如果每次選擇一個新的選項時都需要處理一些事情,那么編寫SelectionChange(變更選擇)事件的事件處理程序。使用更多的事件是DoubleClicked,該事件在用戶雙擊列表框的選項時觸發(fā)。P145頁的例子實現(xiàn)的功能:單擊按紐>>將左邊列表框的選中學(xué)生姓名移到右邊的列表框中。單擊按紐<<將右邊列表框的選中學(xué)生姓名移到左邊的列表框中。雙擊列表框中某一項,將該項移到另一個列表框中看書上的代碼:W_listboxLb_1>><<Lb_21、在按紐>>的clicked事件中:intindex1,ts,istringitem1//ts=lb_1.totalselected()//得到列表框1選中的項數(shù) i=0//循環(huán)變量賦初值 dowhilei<ts forindex1=1tolb_1.totalitems() iflb_1.state(index1)=1then lb_2.additem(lb_1.text(index1)) i++ lb_1.deleteitem(index1) exit endif next loop換一種方式:integeri//將LB_1選中的項加到LB_2中fori=1tolb_1.totalitems() iflb_1.state(i)=1then lb_2.additem(lb_1.text(i)) endifnext//刪除LB_1中選中的項forlb_1.totalitems()to1step-1 iflb_1.state(i)=1then lb_1.deleteitem(i) endifnext2.在按紐<<的clicked事件中integeri//將LB_2選中的項加到LB_1中fori=1tolb_2.totalitems() iflb_2.state(i)=1then lb_1.additem(lb_2.text(i)) endifnext//刪除LB_2中選中的項fori=lb_2.totalitems()to1step-1 iflb_2.state(i)=1then lb_2.deleteitem(i) endifnext3.在LB_1的doubleclicked事件中:在列表框的doubleclicked事件中,有一個入口參數(shù)index該參數(shù)表示雙擊的索引號.Lb_2.additem(lb_1.item(index))Lb_1.deleteitem(index)4.在LB_2的doubleclicked事件中l(wèi)b_1.additem(lb_2.item(index))lb_2.deleteitem(index)對上例的改進(jìn):以上四個操作都是將一個列表框中選定的項移到另一個列表框中,可以定義一個窗口函數(shù)wf_move_item(reflistboxlb_s,reflistboxlb_t)代碼如下:integeri//將LB_s選中的項加到LB_t中fori=1tolb_s.totalitems() iflb_s.state(i)=1then lb_t.additem(lb_s.text(i)) endifnext//刪除LB_2中選中的項fori=lb_s.totalitems()to1step-1 iflb_s.state(i)=1then lb_s.deleteitem(i) endifnext1、在>>的clicked事件中wf_move_item(lb_1,lb_2)2、在<<的clicked事件中wf_move_item(lb_2,lb_1)3、在lb_1的doubleclicked事件中wf_move_item(lb_1,lb_2)4、在lb_2的clicked事件中wf_move_item(lb_2,lb_1)第19章游標(biāo)游標(biāo)是什么在關(guān)系型數(shù)據(jù)庫的SQL語言中,游標(biāo)是存放結(jié)果集的數(shù)據(jù)對象。我

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論