【问题标题】:C# .NET Compact Framework, custom UserControl, focus issueC# .NET Compact Framework,自定义 UserControl,焦点问题
【发布时间】:2009-10-30 08:24:13
【问题描述】:

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

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

一个小模型: 窗体-> 面板-> 控件-> 在 keydown 事件(使用 KeyPreview)上使用 foreach 我检查了哪些控件在面板上具有焦点并使用 SelectNextControl 传递给下一个控件,但没有人有焦点,因为用户控件没有获得焦点...

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

有人知道我能做什么吗?

【问题讨论】:

    标签: .net windows-mobile user-controls coldfusion


    【解决方案1】:

    我们在 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!
    }
    

    【讨论】:

    • 谢谢! (需要更多来自系统的五个字符才能添加此评论)
    • 甜蜜的答案。这是获得焦点的少数可靠方法之一。
    • @thephpdeveloper - 它基本上会在广度优先搜索和深度优先搜索之间产生差异,我们的假设是第一种方法在大多数情况下会更快地终止。
    • 啊,是的,我现在看到了。我反对双重迭代,所以请原谅我
    【解决方案2】:

    您的面板没有获得任何焦点是正常的。您可以尝试查看用户控件的任何子项是否包含焦点。像这样的:

    bool ContainsFocus(Control lookAtMe) {
     if (lookAtMe.Focused) return true;
     else {
         foreach (Control c in lookAtMe.Controls) {
             if (c.Focused) return true;
         }
     }
     return false;
    }
    

    如果需要,您也可以递归遍历它们,但我认为这不是您的要求之一。

    【讨论】:

      猜你喜欢
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      相关资源
      最近更新 更多