gpt4 book ai didi

delphi - MDI 上的 DBGrid 焦点错误

转载 作者:行者123 更新时间:2023-12-02 09:40:38 26 4
gpt4 key购买 nike

当我将 DbGrid 放在 MDIChildForm 中时,我遇到了 DbGrid 焦点错误。

要重新处理该错误:

  • 创建 MDI 应用程序
  • 在主窗体中,放置一个面板和一个编辑器
  • 创建 MDI 子表单
  • 放置 DBGrid 并分配数据(多于 1 条记录)

dbgrid focus bug on mdi

现在,运行应用程序,并按照以下步骤操作:

  • 单击网格,将焦点置于第一行
  • 单击“编辑”以将其聚焦
  • 现在尝试单击 dbgrid 的另一行。

错误:

  • dbgrid 没有获得焦点,什么也没发生!

我正在使用Delphi 7

有人可以帮我解决问题吗?

最佳答案

该问题是由 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;

关于delphi - MDI 上的 DBGrid 焦点错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21834687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com