<自用筆記>PB數據窗口控件之事件

【事件】

◆Clicked
鼠標左鍵在數據窗口控件上任意位置單擊時觸發該事件。該事件中有4個參數,可以在腳本中直接使用。
xpos:表示和數據窗口最左側的距離的整數。
ypos:表示和數據窗口最上部的距離的整數,不包括標題條。
row:表示用戶所單擊的行號的long型數。
dwo:用戶單擊對象,是DWObject類型。
在該事件的腳本中使用這些參數,可以給用戶一些提示信息或者獲取用戶單擊內容的信息。
返回值:0表示繼續處理,這是缺省值。1表示停止處理。
*當選擇和當前行不同的數據行時可以觸發ItemFocusChanged和RowFocusChanged事件,當單擊當前行的其他字段時可以觸發ItemFocusChanged事件。DoubleClicked事件也可以觸發該Clicked事件。

◆DBError
在數據窗口控件中發生數據庫錯誤時觸發該事件。該事件有以下參數。
SQLdbcode:long類型的錯誤代碼,具體含義由DBMS指定。當DBMS沒有指定錯誤代碼時,SQLdbcode提供4個錯誤代碼,-1表示事務對象參數錯誤而不能聯結到數據庫,-2表示不能聯結到數據庫,-3表示因爲其他用戶的修改導致用來進行檢索或修改的鍵值在數據庫中已經不存在而產生錯誤,-4表示向數據庫中寫blob對象時失敗。
SQLerrtext:string類型,數據庫指定的錯誤信息。
SQLsyntax:string類型,當錯誤發生時,發送到數據庫的SQL語句。
buffer:DWBuffer枚舉型,表示導致錯誤的數據所在的緩衝區。
row:long類型,導致錯誤的數據的行號。
返回值:可以用return語句任意指定返回什麼數據。有特定含義的返回值是0和1。0表示顯示錯誤信息,1表示不顯示錯誤信息。

◆DoubleClicked
鼠標左鍵在數據窗口控件中雙擊時觸發該事件。該事件中的4個參數和Clicked事件中的名稱及含義完全相同,也可以直接在該事件的腳本中直接使用。
該事件的返回值可以用return指定。有特殊函數的返回值是0,表示繼續處理。

◆EditChanged
在數據窗口控件的編輯框中每次按鈕都觸發該事件。一般很少在該事件下編寫腳本。該事件提供三個參數。
row:long類型,當前編輯的行號。
dwo:DWObject類型,正在編輯的對象。
data:String類型,當前編輯框中的內容。
返回值:可以用return指定任意返回值,0表示繼續處理。
*每次編輯時觸發

◆Error
當數據窗口對象中的數據或者表達式錯誤時觸發該事件,在分佈式系統中聯結髮生錯誤時也會觸發該事件。和DBError事件不同的是,該事件在沒有和數據庫交互時就有可能觸發,而DBError事件觸發時肯定和數據庫發生了交互。通常在該事件中編寫腳本,提供對錯誤的處理。該事件提供了很多參數。
errornumber:unsigned integer類型,由PowerBuilder指定的錯誤代碼號。
errortext:string類型,由PowerBuilder指定的錯誤信息。
errorwindowmenu:string類型,造成錯誤的腳本所在對象的父對象的名稱。
errorobject:string類型,造成錯誤的腳本所在的對象的名稱。
errorscript:string類型,造成錯誤的語句所在的腳本的全部內容。
errorline:unsigned integer類型,造成錯誤的語句在其腳本中所佔的行號。
action:在Error事件下的代碼執行完後,該參數取值由腳本設定。可以指定的值有:ExceptionFail!表示錯誤處理失敗(執行該值有可能觸發應用的SystemError事件);ExceptionIgnore!表示忽略錯誤繼續執行(要謹慎使用該取值,因爲忽略錯誤有可能將再次導致其他錯誤);ExceptionRetry值只能用於OLE,對於數據窗口控件,沒有該取值,該取值表示再次執行剛纔造成錯誤的功能;ExceptionSubstituteReturnValue!表示使用參數returnvalue的返回值,而不是返回OLE服務器或數據窗口控件的錯誤代碼,並且取消錯誤狀態。
returnvalue:當Action指定爲ExceptionSubstituteReturnValue!時返回該參數的取值。
*對於數據窗口控件來說,如果在運算數據或屬性表達式時發生了錯誤,將進行如下的錯誤處理過程:
a.觸發Error事件;
b.如果Error事件中沒有腳本或者Action變量設置成ExceptionFail!,則觸發應用的SystemError事件;
c.如果SystemError事件下也沒有腳本,便會發生應用程序錯誤,然後終止應用程序。
所以,在該事件或者應用的SystemError事件下應該編寫腳本。這樣才不至於退出應用程序,使用戶沒有處理的機會,甚至錄入了半天的數據連個保存的機會也沒有了。
返回值:該事件沒有返回值,也不在該事件中使用return語句。

◆ItemChanged
當某單元(行和列的交叉點叫做單元)編輯後(內容改變),光標要離開時觸發該事件,如使用了Enter按鈕、單擊了Tab按鈕、使用了光標鍵、在其他字段上單擊了鼠標左鍵等。當編輯完一個單元的內容而沒有離開該單元,這時數據窗口失去焦點,這種情況不會觸發該事件(所以在LoseFocus事件中要使用函數AcceptText)。三個參數row、dwo和data的含義和EditChanged事件的三個參數完全相同。
返回值:可以使用return語句返回任意值。0表示接受剛剛修改的數據,該值是缺省值;1表示放棄剛纔的修改,不允許焦點離開;2表示放棄剛纔的修改,允許焦點離開。
*編輯框內容有變化並離開此編輯框時觸發;注意:當editchanged事件下有代碼,編輯框內容有變化且離開此編輯框時,不會觸發此事件

◆ItemError
當某單元被編輯後光標要離開時,如果單元中的新數據不能通過有效性校驗,則觸發該事件。(同ItemChanged:當編輯完一個單元的內容而沒有離開該單元,這時數據窗口失去焦點,這種情況不會觸發該事件)該事件在ItemChanged事件之前觸發,該事件觸發就不能再觸發ItemChanged事件了。該事件中的三個參數和ItemChanged事件中的三個參數完全相同。
返回值:可以使用return語句返回任意數值, 0表示放棄修改的數據,並顯示錯誤信息,焦點不離開該單元,該取值是缺省值;1表示放棄修改的數據但不顯示錯誤信息提示,焦點不離開該單元;2表示接受剛剛修改的錯誤數據;3表示放棄剛剛修改的數據,並且焦點不離開該單元。

◆ItemFocusChanged
當焦點離開某單元時觸發該事件(不管內容有沒有改變)。該事件提供了row和dwo兩個參數,含義和前面介紹的完全相同。可以使用return語句返回任意數值,0表示繼續處理。
*不管編輯框中的內容有沒有改變,離開編輯框時觸發該事件,注意:當離開數據窗口時不觸發

◆PrintEnd
當打印工作完成時觸發該事件。參數PagesPrinted可以在腳本中直接使用,是一個long類型的變量,表示已經被打印的頁數。

◆PrintPage
在數據窗口每頁進行打印格式處理之前觸發該事件。參數Copy和PageNumber在腳本中可以直接使用,表示該頁要打印的份數和當前頁的頁號。返回值0表示不要跳過當前頁,1表示跳過當前頁。一般在該事件下編寫腳本顯示打印進度信息,例如:
st_1.text="正在打印第"+String(pageNumber)+ "頁……"
也可以在該事件中決定是否真正要打印該頁。例如,下面的腳本只打印偶數頁碼的頁面:
If Mod(pagenumber,2) = 0 Then
return 0
Else
return 1
End If

◆PrintStart
數據窗口打印開始時觸發該事件。該事件中的參數PagesMax是一個long型變量,表示將要被打印的總頁數(不包括跳過的頁)。返回0表示繼續處理。

◆RetrieveEnd
當數據窗口檢索完畢時觸發該事件。參數rowcount是一個long型變量,表示檢索完後檢索到的記錄數。

◆RetrieveRow
每檢索到一條記錄時都觸發該事件。參數row是long類型變量,記錄當前檢索到的數據的序號。返回值0表示繼續檢索,1表示停止檢索。檢索大量數據之前可以設置中斷標誌,讓用戶在檢索過程中可以停止檢索。

◆RetrieveStart
當數據窗口的檢索操作將要開始時觸發該事件,該事件中沒有參數。返回值0表示繼續執行,該值是缺省值,1表示不執行檢索,2表示在檢索之前不清除數據行和緩存區。通常不在該事件下編寫腳本,即使編寫腳本,一般也是利用返回值2的特性來控制檢索操作不清除緩存區,這樣可以將檢索到的數據添加到數據窗口中,並且在數據窗口中保留檢索之前的數據。

◆RowFocusChanged
當前行改變時觸發該事件。CurrentRow參數是一個long類型變量,保存當前記錄號。該事件下的典型編程是修改當前行標識,將當前行明顯地標識出來,可以讓用戶清楚地知道要對哪行進行操作,在該事件和其他事件的配合下共同修改當前行標識。
*不管內容有沒有改變,當前行改變時觸發;在離開數據窗口時不觸發
*RowFocusChanging:當前行改變前觸發;參數currentrow觸發前所在行,newrow觸發後當前行;rowfocuschanged的currentrow等於rowfocuschanging的newrow

◆ScrollHorizontal
當使用光標鍵、Tab按鈕、滾動條等等在數據窗口中進行水平滾動時觸發該事件。很少在該事件上編寫腳本。

◆ScrollVertical
當在數據窗口中使用光標鍵、滾動條、Tab鍵等進行上下滾動時觸發該事件。通常在該事件中編寫腳本來改變當前行。因爲當上下滾動數據窗口時,如果當前行不在當前顯示的區域內,則容易給用戶造成錯覺,可以在該事件中編寫腳本將當前頁面的第一行數據設置爲當前行。使用Describe和Evaluate函數可以實現該功能

◆SQLPreview
當執行函數Retrieve、ReselectRow和Update時,SQL語句要提交到DBMS,這時觸發該事件。該事件的參數比較複雜。
request:取值爲PreviewFunctionReselectRow!、PreviewFunctionRetrieve! 或PreviewFunctionUpdate!分別代表觸發該事件的函數是ReselectRow、Retrieve和Update。 SQLtype:引起該事件的SQL語句類型。取值爲PreviewDelete!、PreviewInsert!、PreviewSelect!、PreviewUpdate! 分別表示是Delete 、Insert、Select、Update語句。
SQLsyntax:string類型,取值爲提交到DBMS的SQL語句。
buffer:當前SQL語句所涉及到的數據所在的緩存區,取值爲枚舉型,Delete!、Filter!、Primary!分別表示刪除緩存區、過濾緩存區和主緩存區。
row:long類型變量,表示該事件中涉及到的記錄數。
返回值0表示繼續處理,1表示停止處理,2表示處理下一個SQL請求。

◆UpdateEnd
當從數據窗口控件發送來的對數據庫的修改都完成後觸發該事件。該事件的三個參數RowsInserted、RowsUpdated、RowsDeleted都是long類型的變量,分別表示插入、修改和刪除的記錄數。

◆UpdateStart
在調用了update函數之後、開始修改之前觸發該事件,該事件沒有參數。返回值0表示繼續處理,1表示停止修改。

◆LoseFocus
數據窗口失去焦點時觸發。
該事件中編寫腳本,主要是保證用戶在數據窗口中最後輸入的內容不丟失。數據窗口中的輸入內容只有當焦點改變時才真正轉交給數據窗口,否則只是保存數據窗口的編輯控件。腳本比較簡單:this.AcceptText()
*GetFocus:數據窗口得到焦點時觸發。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章