在PB中用Enter鍵實現跳轉的幾種方法

  在使用PowerBuilder開發的應用軟件時,各控件及數據窗口列之間的轉換基本上是使用Tab鍵或鼠標來實現的。而對於一些長期使用基於字符終端的用戶來說,特別是對頻繁、大量處理數據的用戶來說,每輸完一筆數據,必須通過Tab鍵或鼠標跳轉到下一列中,非常不方便,而採用Enter(回車)鍵更便於數據的操作。這裏,筆者介紹幾種將Enter鍵用作Tab鍵的方法:
  1.在數據窗口中進行列的跳轉 在用戶具體操作時,數據窗口中Enter鍵的使用頻率最高。在設計時,先打開窗口對象,用鼠標點中要用Enter鍵實現跳轉的數據窗口,選擇菜單項“Declare|User Event”,爲該數據窗口控制定義用戶自定義事件。例如有一個窗口,窗口名爲w_sales,內置數據窗口dw_sales,數據窗口有五個列,列名分別爲column1~column5,定義用戶自定義事件爲“dw_sales_key”,對應PowerBuilder事件號爲pbm_dwnkey。定義好事件後,用鼠標點數據窗口工具欄圖標Script,在select event 中選取事件dw_sales_key進行編程,語句如下:
    if keydown(keyenter!)then//判斷按下的是否是Enter鍵
       choose case lower(dw_sales.getcolumnname())
              case "column1"
            dw_sales.setcolumn("column2")
              case "column2"
                   dw_sales.setcolumn("column3")
              case "column3"
                   dw_sales.setcolumn("column4")
              case "column4"
                   dw_sales.setcolumn("column5")
              end choose
    end if
  編程完後,編譯保存,再調用該窗口時,其數據窗口內的列可以用Enter鍵實現跳轉。當然,定義Enter鍵時最好與Tab鍵的跳轉次序一致。其中Tab鍵的跳轉次序可以通過定義數據窗口菜單欄的“Design|Tab Order”項進行定義。當然,也可以不定義用戶自定義事件,而直接在數據窗口的ItemChanged事件下寫入如下語句:
    int i
    i=dw_sales.getcolumn()
    if keydown(keyenter!) and i< 6 then
       dw_sales.setcolumn(i+1)
    end if
    也可實現數據列之間的跳轉。注意,以上均是基於數據插入狀態而言的。而對數據查詢就另當別論了,按上面的語句進行編程,在查詢時,按回車鍵,光標會往下跳,而不是按行逐列查詢,這主要是系統定義Tab鍵時,認定回車時列號不變,而行號遞變,故用上面的方法會引起錯位。若要完全替代Tab鍵功能,還必須做其它方面的工作。在上面的兩種方法中,前者語句太長,而後者必須爲當前列值有所改變時,按Enter鍵才能跳轉。爲此,可採取另一種方法:定義用戶自定義事件,其中事件號爲pbm_dwnprocessenter,該事件編程語句爲:
  int i
  i=dw_sales.getcolumn()
  dw_sales.setcolumn(i+1)
  就可實現跳轉功能,同時又避免出現以上問題。
  2.窗口中各控件之間的跳轉 在窗口中,由於各控件的類型不一樣,設置跳轉就相對複雜一些。讀者可以通過按Enter鍵後焦點的移動來設置各控件的跳轉。如果各控件是同類型的,情況就好辦得多。這裏,筆者舉一個例子:窗口仍然爲w_sales,上面有五個Commandbutton控件,分別爲cb_1~cb_5,在窗口事件key中編寫以下語句:
  graphicobject i
  int j=0
  i=getfocus()
  if keydown(keyenter!)then
    if j=1 then
     j=0
      return
    end if
    post (handle(I),256,9,0)
    j=1
  end if
  這樣,在運行該窗口時,按下Enter鍵,就可以實現該五個控件之間的跳轉。若要在數據窗口中錄完最後一個列值,按Enter鍵跳轉到控件上,可以在筆者舉的第一個例子中增加以下語句:
  case"column5"
     setfocus(cb_1)
即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章