3

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

用户控件具有以下样式:

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

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

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

任何的想法?

4

1 回答 1

3

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

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

于 2011-01-25T15:44:00.127 回答