c# - 我真的必须在自定义控件的 OnMouseDown 中调用 Focus 吗?

标签 c# .net winforms focus

我正在实现一个继承自 Control 的自定义控件。我希望它是可聚焦的(它是一种列表框)。

在构造函数中,我做

SetStyle(ControlStyles.Selectable, true);

我现在可以使用 Tab 导航到控件。

但是,当控件收到鼠标单击时,它不会自动声明焦点。当然,我可以解决这个问题:

protected override void OnMouseDown(MouseEventArgs e)
{
    Focus();
    base.OnMouseDown(e);
}

但这感觉就像是不必要的拼凑。这真的是要走的路吗?或者有什么方法可以告诉 Control 在收到鼠标点击时自动声明焦点?

最佳答案

解体救援!事实证明

SetStyle(ControlStyles.UserMouse, true);

成功了。

具有讽刺意味的是,我曾在 documentation 中阅读过:

UserMouse: If true, the control does its own mouse processing, and mouse events are not handled by the operating system.

这似乎与我想要的完全相反,所以我只尝试将它设置为 false... 很好,WinForms 文档。

关于c# - 我真的必须在自定义控件的 OnMouseDown 中调用 Focus 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2529246/

相关文章:

c# - List.Remove从一个也从另一个删除

c# - 我应该如何缓冲绘制的矩形以提高性能(C#/.NET/WinForms/GDI+)

c# - 是否有 Jeff Atwood 的 C#/Winforms .Net 3.5+ 的用户友好异常处理(或类似的)?

c# - 使用控制台应用程序操作 umbraco 内容

c# - 从另一个类库中的 ViewModel 关闭窗口

c# - 文件流 - 文件名、目录名或卷标语法不正确

.net - 按字母顺序对 ListView 的 ListViewGroup 进行排序

c# - 无尽的异步和等待?

.net - System.ServiceModel.ServiceHost.Dispose() 的实现在哪里?

c# - Visual C# 2008,读取 XML 文件并填充 listView