我有一个自定义用户控件(标签和文本框)。
我的问题是我需要处理按键后,键上的活动形式(控件之间导航.NET Compact Framework的文本框,组合框等)。 由.NET Compact Framework的框架它的工作原理,但是当我到达我写一个用户控件,控制不`吨获得焦点(文本框里面获得焦点),所以从这个用户控件,我不能因为在面板导航提供的控件我没有的谁具有焦点任何控制。
有一点模拟了:形式 - >面板 - >控制 - >与一个foreach我检查什么控制都在面板上的焦点,并通过与SelectNextControl下一控制keydown事件(使用的KeyPreview),但没有人有焦点,因为该用户控件不`吨有重点...
我试图处理文本框GotFocus事件,并把焦点转移到用户的控制,但我得到了一个无限循环..
是否有人有任何想法,我能做些什么?
我们已经做了精简框架完全一样的事情,并称支持使用键盘输入控件之间的导航成为全球焦点经理。
基本上,你需要做的是,直到找到具有焦点的控制递归下降的控件树。 这不是非常有效的,但只要你只能做一次每关键事件,它不应该是一个问题。
编辑:添加的代码为我们递归聚焦引入功能:
public static Control FindFocusedControl(Control container)
{
foreach (Control childControl in container.Controls) {
if (childControl.Focused) {
return childControl;
}
}
foreach (Control childControl in container.Controls) {
Control maybeFocusedControl = FindFocusedControl(childControl);
if (maybeFocusedControl != null) {
return maybeFocusedControl;
}
}
return null; // Couldn't find any, darn!
}
这是正常的,你的面板没有收到任何焦点。 你可以尝试是看,如果你的用户控件的所有子包含焦点。 事情是这样的:
bool ContainsFocus(Control lookAtMe) {
if (lookAtMe.Focused) return true;
else {
foreach (Control c in lookAtMe.Controls) {
if (c.Focused) return true;
}
}
return false;
}
您还可以递归遍历他们,如果这是必要的,但我不认为这是您在此处的要求之一。