C#:如何抑制 UserControl 以将焦点放在第一个子控件上?

发布于 2024-10-14 19:15:43 字数 475 浏览 3 评论 0原文

我有一个可以有子控件的用户控件。

用户控件具有以下样式:

this.SetStyle(
            ControlStyles.AllPaintingInWmPaint |
            ControlStyles.OptimizedDoubleBuffer |
            ControlStyles.Selectable |
            ControlStyles.SupportsTransparentBackColor |
            ControlStyles.UserPaint,
            true);

现在,如果我单击用户控件(不是子控件),我希望用户控件保持焦点,但焦点会自动转到第一个子控件。 如果我使用 Tab 键也会发生同样的事情。

我已经尝试覆盖 OnGotFocus 但没有成功。

有什么想法吗?

I have a UserControl which can have childcontrol.

The usercontrol have the styles:

this.SetStyle(
            ControlStyles.AllPaintingInWmPaint |
            ControlStyles.OptimizedDoubleBuffer |
            ControlStyles.Selectable |
            ControlStyles.SupportsTransparentBackColor |
            ControlStyles.UserPaint,
            true);

Now if I click on the usercontrol (not an child-control) i want the usercontrol to keep the focus, but the focus automatically goes to the first child-control.
The same thing happens if i use the tab key.

i already tried to override OnGotFocus without success.

Any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

埋情葬爱 2024-10-21 19:15:43

这是 UserControl 类内部的硬编码行为,它捕获 WM_SETFOCUS 消息并将焦点传递给子控件。我不知道有什么方法可以覆盖它,即使将其捕获在 WndProc() 中也不起作用,因为没有好的方法让 UC 基类来处理它。

最好的方法是避免战斗,并使用停靠的面板控件来代替您希望 UC 处理的焦点事件。这也需要一些黑客攻击,面板也是一个容器控件,但可以绕过。查看我的回答以获得可聚焦面板。

This is hard-coded behavior inside the UserControl class, it traps the WM_SETFOCUS message and passes the focus to a child control. I do not know of a way to override this, even trapping it in WndProc() doesn't work since there is no good way to get the UC base class to handle it.

The best approach is to avoid the battle and use a docked Panel control to be the stand-in for focusing events you want the UC to handle. That requires some hacking as well, Panel is also a container control, but that can be bypassed. Check out my answer here for a focusable panel.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文