拥有以下WinForms对话框表单,我正在处理MyControl
的{{1}}事件:
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
以自动将焦点转发到其子控件?答案 0 :(得分:2)
有很多可能性:
使用OnLostFocus事件存储当前控件并计算是否按下了TAB或SHIFT TAB
重写ProcessKeyPreview以计算要在OnGotFocus中执行的操作(SO answer)