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