傳遞焦點的五種方法

在編程過程當中,有時我們需要人為地傳遞焦點到下一個Control, 目的方便我們或者是用戶更好的使用,在大量的數據單元輸入或有大量的使用TEDIT( TDBEDIT ) 控件時更是如此。筆者就日常使用的一些方法總結出來,以荀讀者。

從簡單的開始,使用消息傳遞機制:
  1. 把焦點傳遞到下一Control: SendMessage(Form1.Handle, WM_NEXTDLGCTL, 0, 0);
  2. 把焦點傳遞到上一Control: SendMessage(Handle, WM_NEXTDLGCTL, 1, 0);
這種方法的好處是無需考慮Control 的數量、位置及TabOrder 的順序。

使用 Delphi 的內部函數 A:
  1. 把焦點傳遞到下一Control: SelectNext((Sender AS TWinControl),true,false);
  2. 把焦點傳遞到上一Control: SelectNext((Sender AS TWinControl),false,false);
這種方法的缺點是需考慮TabOrder 的順序。

使用 Delphi 的內部函數 B:
  1. 把焦點傳遞到下一Control: FocusControl(FindNextControl((Sender AS TWinControl),True,False,false));
  2. 把焦點傳遞到上一Control: FocusControl(FindNextControl((Sender AS TWinControl),False,False,false));
這種方法的缺點是需考慮TabOrder 的順序。

使用 Delphi 的內部函數 C:
  1. 把焦點傳遞到下一Control: (FindNextControl((Sender AS TWinControl),True,False,false) As TWinControl).SetFocus;
  2. 把焦點傳遞到上一Control: (FindNextControl((Sender AS TWinControl),False,False,false) As TWinControl).SetFocus;
這種方法的缺點是需考慮TabOrder 的順序。

模擬Virual Basic 的SendKey 事件,建立一個SendKey 方法,有興趣的讀者可以參考Delphi 5 CD 光碟的Info\Sendkey 目錄,裡面有詳細的解釋。

在使用以上的方法時,由於都沒有考慮到當焦點轉移時的數據變更問題,讀者在實際運用中應加以注意和處理。


文章出處 : 點擊打開鏈接

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