傳遞焦點的五種方法

11 篇文章 0 订阅
7 篇文章 0 订阅
在編程過程當中,有時我們需要人為地傳遞焦點到下一個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 目錄,裡面有詳細的解釋。

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


文章出處 : 点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android 中,当一个 View 接收到 KeyEvent 时,它会按照以下流程处理 KeyEvent: 1. View.dispatchKeyEvent() 方法会被调用,用于分发 KeyEvent 给当前 View。 2. 如果当前 View 没有处理 KeyEvent,或者 KeyEvent.getAction() 返回 ACTION_DOWN 时,ViewParent 会被依次调用 onKeyDown() 方法,直到有一个 ViewParent 处理了 KeyEvent 或者到达了 View 树的根节点。 3. 如果 KeyEvent 没有被处理,则会调用 View.onUnhandledKeyEvent() 方法。 4. 如果 KeyEvent 还没有被处理,则会调用 Activity.dispatchKeyEvent() 方法,将 KeyEvent 传递给当前 Activity 的 onKeyDown() 方法或者 onKeyUp() 方法。 5. 如果 KeyEvent 还没有被处理,则会调用 Window.Callback.dispatchKeyEvent() 方法,将 KeyEvent 传递给当前 Window 的 onKeyDown() 方法或者 onKeyUp() 方法。 6. 如果 KeyEvent 还没有被处理,则会调用 PhoneWindow.Callback.dispatchKeyEvent() 方法,将 KeyEvent 传递给当前 PhoneWindow 的 onKeyDown() 方法或者 onKeyUp() 方法。 7. 如果 KeyEvent 还没有被处理,则会调用 DecorView.dispatchKeyEvent() 方法,将 KeyEvent 传递给当前 DecorView 的 onKeyDown() 方法或者 onKeyUp() 方法。 8. 如果 KeyEvent 还没有被处理,则会将 KeyEvent 传递给当前 DecorView 的点所在的 View,继续按照上述流程处理 KeyEvent。 这样,KeyEvent 就可以在 Activity、Window、DecorView 和 View 之间传递,直到被处理为止。其中,Activity、Window、DecorView 和 View 都实现了 ViewParent 接口,用于处理 KeyEvent。在处理 KeyEvent 时,ViewParent 可以选择直接处理 KeyEvent,或者将其发送给下一个可处理 KeyEvent 的子 View。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值