【问题标题】:Reassign an OnCellClick event重新分配 OnCellClick 事件
【发布时间】:2016-05-02 15:48:04
【问题描述】:

我有一个包含许多表的 SQLite 数据库,其中一个名为“tblAccounts” 我有一个 dlgCommon,上面有一个 TDBGrid,带有 dbgridAccounts.DataSource:=srcAccounts

我还有其他几个对话框,有时所有这些对话框都需要单击一个按钮并显示帐户网格以从中选择一个帐户。而不是让许多表单都有自己的 TDBgrid.DataSource:=srcAccounts 我正在这样做......

procedure TdlgFolders.btnAcctSelClick(Sender: TObject);
begin
  dlgCommon.pnlAccounts.Parent:=Self;
  dlgCommon.pnlAccounts.Left:=dbedAccount.Left;
  dlgCommon.pnlAccounts.Top:=dbedAccount.Top+dbedAccount.Height+2;
  dlgCommon.pnlAccounts.Width:=190;
end;

当用户激活 dlgFolders 并单击“btnAcctSel”时,这一切都按照我的需要进行并显示了网格。但是,当用户单击 Grid-Cell 时,我不知道在哪里/如何放置 dbgridAccountsCellClick(Column: TColumn);处理程序。

我尝试将它放在 dlgCommon 中并编译,但没有使用,因为当 Grid 可见并且在其他对话框之一中单击单元格时,它不再是父级。

我宁愿继续使用单网格方法,因为用户可以设置列宽、行颜色等,我不想让他们在需要帐户网格的每个表单中都这样做。

如何重新分配 dlgCommon.AccountsCellClick 以便捕获点击并在 dlgFolders 和其他调用它的对话框中使用?

【问题讨论】:

  • 在旁注中,您似乎误用了“对话”一词。我相信您的意思是一般地谈论表格; “对话框”是我不相信您在这里使用的表单的特定实现。

标签: delphi onclick delphi-6


【解决方案1】:

我不确定我是否遵循您的结构和设计,但我会将显示帐户的网格放在TFrame 上。除了网格本身之外,这个TFrame 将包含网格所需的所有事件处理程序。

然后,当您需要显示网格时,实例化框架,分配其父级,网格和事件处理程序就可以使用了。


在第二次和第三次阅读中,如果dlgCommon 是一个具有类似层次结构的表单

  dlgCommon: TdlgCommon
    pnlAccounts: TPanel
      AccountsGrid: TDBGrid

您似乎试图从该表单中“删除”(通过更改父级)pnlAccounts,然后事件处理程序不起作用,正如您所注意到的那样。

像这样更改组件父级的想法是一个非常糟糕的主意,因为当您将新父级分配给网格时,它当然不会再出现在 dlgCommon 中。它一次只能在一个对话框中显示。

如果您希望网格在(至少)一段时间内同时在各种表单上可见,我仍然会像我已经建议的那样使用TFrame

在这种情况下,您可以手动将OnCellClick 事件添加到表单私有部分

procedure DBGridCellClick(Column: TColumn);

并以形式实现

procedure TForm1.DBGridCellClick(Column: TColumn);
begin
  // whatever you want to do
end;

然后你按如下方式实例化框架:

procedure TForm1.Button2Click(Sender: TObject);
begin
  frame:= TFrame3.Create(self);
  frame.Parent := self;
  frame.Left := 8;
  frame.Top := 75;
  frame.DBGrid1.OnCellClick := DBGridCellClick;
end;

另一方面,如果用户只需要简单地查看网格,以选择一个帐户(并完成它),我将简单地以模态方式显示 dlgCommon。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多