程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> PB中dynamic調用類型的用法

PB中dynamic調用類型的用法

編輯:SyBase綜合文章
 說到DYNAMIC調用類型,我們先看看對象、屬性、函數和事件的引用方法:
  PowerBuilder 6.0應用程序的開發過程實際上就是各種對象的定義和使用過程。所有對象都有名稱,並通過名稱相互區分。在PowerScript中,訪問對象的屬性、函數、事件的方法很簡單,就是使用圓點作為標記符,具體來說,訪問對象屬性的格式為:
  對象名.對象屬性
  例如,把單行編輯框sle_name的用戶輸入內容送到字符串變量UserEnter的語句可以寫成:
  UserEnter=sle_name.Text
  其中,sle_name是一個單行編輯框對象的名稱,Text是單行編輯框的Text屬性。
  程序中訪問對象的函數與事件的格式為:
  { objectname.} { type } { calltype } { when } functionname ( { argumentlist } )
  其中,大括號所括成分根據情況可以省略,各成分的意義為:
  objectname是對象名;
  type取值為FUNCTION或EVENT,用於指明訪問函數還是事件,缺省值為FUNCTION;
  calltype用於指明PowerBuilder 查找函數的時機,有效取值為:
  STATIC(缺省值):編譯時查找函數,若不存在,產生編譯錯誤
  DYNAMIC:程序運行時查找函數,若不存在,產生運行錯誤
  when用於指明函數或事件是立即執行呢還是當前程序段執行完畢後執行,取值為:
  TRIGGER(缺省值):立即執行
  POST:當前程序段執行完畢後執行
  functionname指明調用的函數或事件名稱
  argumentlist給出函數或事件的參數
  例如,想把輸入焦點移動到單行編輯框sle_name上,程序中寫上語句:sle_name.SetFocus()即可。想立即執行按鈕cb_name的單擊事件處理程序,那麼寫上語句:cb_name .EVENT TRIGGER Clicked()即可。
  從以上看出,DYNAMIC是指定函數或事件的一個動態調用,即當你指定一個動態調用時,函數和事件在編譯時不一定要存在。你告訴編譯器:相信我,此處在運行時一定會有一個合適的函數或事件。對於動態調用,PowerBuilder等到執行時才尋找函數或事件。這就給了你更大的編程靈活性。
  請比較以下的示例(摘錄):
  目前流行的大部分應用程序中都提供了Undo功能,在PowerBuilder中也可以利用Undo()函數實現該功能。Undo()函數可用於DataWindow, EditMask, MultiLineEdit, RichTextEdit和SingleLineEdit 對象,如果只對某一個對象進行Undo操作,只需在Undo菜單項的單擊事件中鍵入如下腳本:Objectname.undo(),但是當窗口中有多個對象,我們在編寫腳本時並不知道要對哪個對象執行undo()操作,如何解決這一問題呢?在PowerBuilder中,undo()等函數只能用於可視對象,而所有可視對象均繼承自系統對象類GraphicObject。因此我們可以定義一個GraphicObject對象的實例變量go_object,等到運行時再用getfocus()函數確定具體操作對象。然後用Typeof()函數確定當前對象的類型,再用Choose case語句根據不同的類型引用不同的實例變量,代碼如下:
  graphicobject go_object
  DataWindow dw_object
  EditMask em_object
  MultiLineEdit mle_object
  RichTextEdit rte_object
  SingleLineEdit sle_object
  go_object=getfocus()
  choose case TypeOf(go_object)
  case DataWindow!
  dw_object=go_object
  dw_object.undo()
  case EditMask!
  em_object=go_object
  em_object.undo()
  case MultiLineEdit!
  mle_object=go_object
  mle_object.undo()
  case RichTextEdit!
  rte_object=go_object
  rte_object.undo()
  case SingleLineEdit!
  sle_object=go_object
  sle_object.undo()

 case else
  messagebox("出錯","不能撤消!")
  end choose
  其實我們可以用動態調用函數的方法簡單地解決這一問題,即對GraphicObject對象調用undo()函數,然後在函數名前加上關鍵字Dynamic

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved