C# .NET Compact Framework, custom UserControl, focus issue(C# .NET Compact Framework,自定义 UserControl,焦点问题)
问题描述
我有一个自定义 UserControl(一个标签和一个文本框).
I have a custom UserControl (a label and a textbox).
我的问题是我需要处理按键按下、按键向上事件以在表单中的控件之间导航 (.NET Compact Framework 文本框、组合框等).使用 .NET Compact Framework 框架提供的控件,它可以工作,但是当我到达我编写的用户控件时,该控件没有获得焦点(里面的文本框获得焦点)所以从这个用户控件我无法导航,因为在面板中我无法控制谁拥有焦点.
My problem is I need to handle the key down, key up events to navigate between controls in the form (.NET Compact Framework textbox, combobox, etc). With the controls provided by the .NET Compact Framework framework it works, but when I reach a usercontrol written by me, that control don`t get focus (the textbox inside get the focus) so from this usercontrol I cannot navigate because in the panel I don't have any control of who have focus.
一个小模型:Form->Panel->controls-> on keydown event (使用 KeyPreview) with a foreach 我检查面板上有焦点的控件并使用 SelectNextControl 传递给下一个控件,但没有人有焦点,因为 usercontrol 没有获得焦点...
A little mock up : Form->Panel->controls -> on keydown event (using KeyPreview) with a foreach I check what control have focus on the panel and pass to the next control with SelectNextControl, but no one have focus because the usercontrol don`t got focus...
我试图处理文本框 gotFocus 事件并将焦点放在用户控件上,但我得到了一个无限循环..
I tried to handle the textbox gotFocus event and put focus to the user control, but I got an infinite loop..
有人知道我能做什么吗?
Does somebody have any idea what can I do?
推荐答案
我们在 Compact Framework 上做了完全相同的事情,添加了一个全局焦点管理器,支持使用键盘输入在控件之间导航.
We've done the exact same thing on Compact Framework, adding a global focus manager that supports navigating between controls using keyboard input.
基本上,您需要做的是向下递归控件树,直到找到具有焦点的控件.它的效率不是很高,但只要每个关键事件只执行一次,这应该不是问题.
Basically, what you need to do is to recurse down the tree of controls until you find a control that has focus. It's not terribly efficient, but as long as you only do it once per key event, it shouldn't be an issue.
为我们的递归焦点查找函数添加了代码:
Added the code for our recursive focus finding function:
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!
}
这篇关于C# .NET Compact Framework,自定义 UserControl,焦点问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C# .NET Compact Framework,自定义 UserControl,焦点问题
基础教程推荐
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- MS Visual Studio .NET 的替代品 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- rabbitmq 的 REST API 2022-01-01