C# 在Control.GotFocus中检测用户是向前还是向后导航?
使用以下WinForms对话框窗体,我正在处理MyControl的事件: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);
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好的,事实是,我是从一个DevExpressXtraUserControl
控件派生出来的,而这个控件又派生自UserControl
。也许这就是引起关注的原因?