Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Control.GotFocus中检测用户是向前还是向后导航?_C#_Winforms_Focus - Fatal编程技术网

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

C# 在Control.GotFocus中检测用户是向前还是向后导航?,c#,winforms,focus,C#,Winforms,Focus,使用以下WinForms对话框窗体,我正在处理MyControl的事件: MyControl源于DevExpress,而DevExpress又源于Microsoft WinForms标准 我想要实现的是,当用户使用选项卡导航时,MyControl获得焦点,并且MyControl获得焦点时,焦点将转发到子控件 我使用以下代码成功地完成了此操作: protected override void OnGotFocus(EventArgs e) { base.OnGotFocus(e);

使用以下WinForms对话框窗体,我正在处理MyControl的事件:

MyControl
源于DevExpress,而DevExpress又源于Microsoft WinForms标准

我想要实现的是,当用户使用选项卡导航时,
MyControl
获得焦点,并且
MyControl
获得焦点时,焦点将转发到子控件

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

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

    // Forward.
    foreach (Control control in Controls)
    {
        if (control.TabStop)
        {
            control.Select();
            break;
        }
    }
}
也就是说,如果
按钮1
对焦,并且用户按下Tab键,则焦点设置为
按钮2

我无法解决的是,如果用户向后导航。也就是说,如果
按钮4
对焦,并且用户按下Shift+Tab键,则焦点应设置为
按钮3

我的两个问题是:

  • 是否有办法在
    GotFocus
    事件中检测用户的导航顺序
  • 我这样做对吗?也许有一个内置的函数/标志可以设置为
    MyControl
    ,自动将焦点转发到它的子控件
    • 有这么多的可能性:

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

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

      • 重写ProcessCmdKey,如中所示


      这可能会有所帮助,正如您可以看到的那样,
      GotFocus
      事件的无用的
      EventArgs
      参数,您无法说出是什么设置了控件的焦点(tab,shit+tab,左键单击,右键单击…)。没有任何简单的方法可以完成你问的事情。更大的问题是用户控件是如何获得焦点的。它不需要焦点,当它需要焦点时,它会立即将焦点传递给客户端控件。谢谢,@HansPassant-我会调查在创建控件时是否做错了什么。@HansPassant好的,事实是,我是从一个DevExpress
      XtraUserControl
      控件派生出来的,而这个控件又派生自
      UserControl
      。也许这就是引起关注的原因?