gpt4 book ai didi

.net - 如何跟踪任何子控件何时在 WinForms 中获得或失去焦点?

转载 作者:行者123 更新时间:2023-12-05 00:59:36 24 4
gpt4 key购买 nike

我有一个 Windows 窗体自定义控件,它的作用类似于一个面板,因为它可以包含任意数量的子控件。子控件的数量和类型是在运行时确定的,因此我需要以通用方式工作,而不知道可能存在或不存在的确切子控件。

我想根据面板是否包含焦点来更改面板的背景颜色。因此,如果面板的子项(或面板的子项的子项等...)获得焦点,我想知道这一点,以便我可以更新自定义面板的背景颜色。当焦点转移到不在子层次结构中的东西时,我也需要知道,以便我可以恢复到原始背景颜色。

Control.ContainsFocus 非常适合告诉我面板是否包含子层次结构中的焦点,但我需要知道何时发生更改。目前我只能想出以下糟糕的机制。

我 Hook 到每个 child 的 GotFocus/LostFocus 以及每个 child 的每个 child 等。我还必须 Hook ControlAdded/ControlRemoved 以确保我与可能变化的子层次结构保持同步。如您所见,这可能会以大量事件 Hook 结束,我怀疑一定有更简单的方法。有什么想法吗?

最佳答案

似乎使用 EnterLeave 事件就是答案。 GotFocus 只会被发送到获得焦点的特定控件,而 Enter 事件也会被发送到获得 GotFocus 事件的控件的父(和祖先)控件。

来自 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.leave.aspx

"The Enter and Leave events are hierarchical and will cascade up and down the parent chain until the appropriate control is reached. For example, assume you have a Form with two GroupBox controls, and each GroupBox control has one TextBox control. When the caret is moved from one TextBox to the other, the Leave event is raised for the TextBox and GroupBox, and the Enter event is raised for the other GroupBox and TextBox."

关于.net - 如何跟踪任何子控件何时在 WinForms 中获得或失去焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/891423/

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