我正在实施一个继承自Control
的自定义控件。我希望它是可以聚焦的(这是一种列表框)。我真的必须在我的自定义控件的OnMouseDown中调用Focus吗?
在构造函数中,我做
SetStyle(ControlStyles.Selectable, true);
我现在可以使用Tab键导航到控制。
但是,当控件收到鼠标点击时,它不会自动声明焦点。当然,我可以解决这个问题:
protected override void OnMouseDown(MouseEventArgs e)
{
Focus();
base.OnMouseDown(e);
}
但是,这感觉就像一个不应该是必要的kludge。这真的是要走的路吗?或者有什么方法可以让Control
在接收到鼠标点击时自动声称焦点?
@Thomas:你提到“我已经有了焦点矩形到位”:你是通过覆盖OnGotFocus和OnLostFocus并调用ControlPaint.DrawFocusRectangle来做到这一点?感谢任何回应。 – BillW
@BillW:是的,这就是我所做的。 “OnGotFocus”和“OnLostFocus”使包含焦点矩形的矩形失效; 'OnPaint'检查'Focused'属性并根据需要调用'ControlPaint.DrawFocusRectangle'。 – Thomas
您的病人对我的问题的反应非常感谢!我发布了一个更多答案,这是我可以在Visual Studio RC1中针对FrameWork 3.5(完整版)编译的唯一方法。通过“工作”:我的意思是,当控件是“tabbed-to”时,它会显示一个选择矩形,当“tabbed-away-from”选择矩形消失时:单击Control时,将显示选择矩形。 – BillW