在編程過程當(dāng)中,有時我們需要人為地傳遞焦點(diǎn)到下一個 Control, 目的方便我們或者是用戶更好的使用 ,在大量的數(shù)據(jù)單元輸入或有大量的使用 TEDIT( TDBEDIT ) 控件時更是如此。筆者就日常使用的一些方法總 結(jié)出來,以荀讀者。 從簡單的開始 使用消息傳遞機(jī)制: 1、把焦點(diǎn)傳遞到下一 Control: SendMessage(Form1.Handle, WM_NEXTDLGCTL, 0, 0); 2、把焦點(diǎn)傳遞到上一 Control: SendMessage(Handle, WM_NEXTDLGCTL, 1, 0); 這種方法的好處是無需考慮 Control 的數(shù)量、位置及 TabOrder 的順序。 使用 Delphi 的內(nèi)部函數(shù) A: 1、把焦點(diǎn)傳遞到下一 Control: SelectNext((Sender AS TWinControl),true,false); 2、把焦點(diǎn)傳遞到上一 Control: SelectNext((Sender AS TWinControl),false,false); 這種方法的缺點(diǎn)是需考慮 TabOrder 的順序。 使用 Delphi 的內(nèi)部函數(shù) B: 1、把焦點(diǎn)傳遞到下一 Control: FocusControl(FindNextControl((Sender AS TWinControl),True,False,false)); 2、把焦點(diǎn)傳遞到上一 Control: FocusControl(FindNextControl((Sender AS TWinControl),False,False,false)); 這種方法的缺點(diǎn)是需考慮 TabOrder 的順序。 使用 Delphi 的內(nèi)部函數(shù) C: 1、把焦點(diǎn)傳遞到下一 Control: (FindNextControl((Sender AS TWinControl),True,False,false) As TWinControl).SetFocus; 2、把焦點(diǎn)傳遞到上一 Control: (FindNextControl((Sender AS TWinControl),False,False,false) As TWinControl).SetFocus; 這種方法的缺點(diǎn)是需考慮 TabOrder 的順序。 模擬 Virual Basic 的 SendKey 事件,建立一個 SendKey 方法,有興趣的讀者可以參考 Delphi 5 CD 光碟的Info\Sendkey 目錄,里面有詳細(xì)的解釋。 在使用以上的方法時,由于都沒有考慮到當(dāng)焦點(diǎn)轉(zhuǎn)移時的數(shù)據(jù)變更問題,讀者在實(shí)際運(yùn)用中應(yīng)加以注意和 處理。
|