gpt4 book ai didi

.net - 在 WinForms 应用程序中找到焦点控件的首选方法是什么?

转载 作者:行者123 更新时间:2023-12-03 05:33:50 25 4
gpt4 key购买 nike

在 WinForms 中查找当前正在接收用户(键盘)输入的控件的首选/最简单方法是什么?

到目前为止,我已经提出了以下内容:

public static Control FindFocusedControl(Control control)
{
var container = control as ContainerControl;
return (null != container
? FindFocusedControl(container.ActiveControl)
: control);
}

从表单中,可以简单地调用它(在 .NET 3.5+ 中,甚至可以将其定义为表单上的扩展方法)-

var focused = FindFocusedControl(this);

这样合适吗?

是否有我应该使用的内置方法?

请注意,当使用层次结构时,对 ActiveControl 的一次调用是不够的。想象一下:

Form
TableLayoutPanel
FlowLayoutPanel
TextBox (focused)

(formInstance).ActiveControl 将返回对 TableLayoutPanel 的引用,而不是 TextBox(因为 ActiveControl 似乎只返回控件树中的直接事件子级,而我正在寻找叶控件)。

最佳答案

如果您已经有其他对 Windows API 的调用,那么使用 Peters 解决方案没有什么坏处。但我理解您对此的担忧,并且会倾向于与您类似的解决方案,仅使用框架功能。毕竟,性能差异(如果有的话)应该不会很大。

我会采取非递归方法:

public static Control FindFocusedControl(Control control)
{
var container = control as IContainerControl;
while (container != null)
{
control = container.ActiveControl;
container = control as IContainerControl;
}
return control;
}

关于.net - 在 WinForms 应用程序中找到焦点控件的首选方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/435433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com