当我将它放在MDIChildForm中时,我得到了一个DbGrid焦点错误。
重新编写错误:
现在,运行该应用程序,然后按照以下步骤操作:
错误:
我正在使用 Delphi 7 。
有人可以帮我解决问题吗?
答案 0 :(得分:2)
问题是由Form.ActiveControl创建的。
在这种情况下,在编辑焦点之后,MDI子节点将DBGrid保留为活动控件,因此在单击dbgrid后不会调用Windows.SetFocus。
我通过覆盖TDBGrid.SetFocus来解决问题:
type
TMyDBGrid = class(TDBGrid)
public
procedure SetFocus; override;
end;
procedure TMyDBGrid.SetFocus;
var
form: TCustomForm;
begin
inherited;
// BUG-FIX: force the SetFocus if the current Control is Self but not focused!
form := GetParentForm(Self);
if (form <> nil) and (form.ActiveControl = Self) and not Focused then
Windows.SetFocus(Self.Handle);
end;
答案 1 :(得分:0)
我通过放行
来解决问题self.setfocus2
事件OnShow
中的。我还在OnActivate
事件中添加了相同的代码。它现在完美无缺。