C#.NET Compact Framework,自定义UserControl,焦点问题

Ale*_*lex 2 .net coldfusion user-controls windows-mobile

我有一个自定义UserControl(标签和文本框).

我的问题是我需要处理键,键入事件以在表单中的控件之间导航(.NET Compact Framework文本框,组合框等).使用.NET Compact Framework框架提供的控件可以正常工作,但是当我到达我编写的用户控件时,该控件无法获得焦点(文本框内部得到焦点)所以从这个用户控件我无法导航,因为在面板中我无法控制谁有焦点.

一点点模拟:Form-> Panel-> controls - >关于keydown事件(使用KeyPreview)和foreach我检查哪个控件关注面板并使用SelectNextControl传递给下一个控件,但没有人有焦点,因为用户控件没有专注......

我试图处理文本框的gotFocus事件并将焦点放到用户控件上,但是我得到了一个无限循环..

有人知道我该怎么办?

Sof*_*mes 7

我们在Compact Framework上做了完全相同的事情,添加了一个全局焦点管理器,支持使用键盘输入在控件之间导航.

基本上,您需要做的是递减控件树,直到找到具有焦点的控件.它不是非常有效,但只要你每次关键事件只做一次,它就不应该是一个问题.

编辑:添加了递归焦点查找功能的代码:

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!
}
Run Code Online (Sandbox Code Playgroud)