编程语言
首页 > 编程语言> > C#:如何禁止UserControl给予焦点第一个子控件?

C#:如何禁止UserControl给予焦点第一个子控件?

作者:互联网

我有一个可以有子控件的UserControl.

用户控件具有以下样式:

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

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

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

任何想法?

解决方法:

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

最好的方法是避免争斗,并使用停靠的面板控件作为焦点,以集中处理您希望UC处理的事件.这也需要一些技巧,Panel也是一个容器控件,但是可以绕开它.查看my answer here以获取可聚焦面板.

标签:focus,user-controls,c,childcontrol
来源: https://codeday.me/bug/20191208/2094050.html