在Control.GotFocus中检测用户是向前还是向后导航?

时间:2012-02-14 09:19:20

标签: c# winforms focus

拥有以下WinForms对话框表单,我正在处理MyControl的{​​{1}}事件:

enter image description here

MyControl派生自DevExpress GotFocus,后者又源自Microsoft WinForms标准XtraUserControl

我想要实现的是,当用户使用标签进行导航并且MyControl获得焦点时MyControl获得焦点时,焦点会转发到儿童控制。

我使用以下代码成功完成此操作:

protected override void OnGotFocus(EventArgs e)
{
    base.OnGotFocus(e);

    // Forward.
    foreach (Control control in Controls)
    {
        if (control.TabStop)
        {
            control.Select();
            break;
        }
    }
}

即。如果焦点Button 1并且用户按下 Tab 键,焦点将设置为Button 2

不能能够解决的是用户向后导航。即如果焦点Button 4并且用户按下 Shift + Tab 键,则焦点应设置为Button 3

我的两个问题是:

  • 有没有办法在GotFocus事件中检测用户的导航顺序?
  • 我是以正确的方式做到的吗?也许有一个内置函数/标志我可以设置为MyControl以自动将焦点转发到其子控件?

1 个答案:

答案 0 :(得分:2)

有很多可能性:

  • 使用OnLostFocus事件存储当前控件并计算是否按下了TAB或SHIFT TAB

  • 重写ProcessKeyPreview以计算要在OnGotFocus中执行的操作(SO answer

  • this answer

  • 中覆盖ProcessCmdKey