4

我正在编写一个基于 TCustomControl 的网格控件,因此我可以自己处理所有结构、绘画和导航。我似乎无法弄清楚的一点是:

在我的构造函数中,我将 ControlStyle 设置为:

ControlStyle := ControlStyle + [csCaptureMouse, csClickEvents,
    csDoubleClicks, csNeedsBorderPaint, csPannable];

这个想法是,如果控件处理鼠标事件,我可以做一些事情,比如设置选择等。我注意到虽然控件永远不会获得焦点。我碰巧在表单上有一个 TComboBox,并且在创建表单时它显然是集中的。无论我在网格中单击多少次,焦点都停留在组合框上。

这当然对我处理键盘事件也有影响。

那么问题来了,当你点击它时,如何确定焦点应该转移到一个控件上呢?

4

1 回答 1

10

CustomControl 应在单击时对其自身调用 SetFocus。

procedure TMyCustomControl.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  inherited;

  if not (csDesigning in ComponentState) and CanFocus then
    SetFocus;
于 2009-09-09T10:16:55.943 回答