2016-05-02 46 views
0

我有一个SQLite数据库有许多表和一个名为“tblAccounts” 我已经具有的TDBGrid上它与dbgridAccounts.DataSource一个dlgCommon:= srcAccounts重新分配OnCellClick事件

我还有其它的对话框所有这些在某些时候需要点击一个按钮并显示帐户网格以从中选择一个帐户。不是有很多形式都用自己的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中,它编译,但没有使用,因为当网格可见并且单元格在其他对话框之一中单击时不再是父类。

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

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

+0

请注意,您似乎错误地使用了术语“对话框”。我相信你的意思是说一般的表格; “对话框”是一个我不相信你在这里使用的表单的具体实现。 –

回答

0

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

然后,无论何时你需要显示网格,你实例化框架,分配它的父节点,并且网格和事件处理程序可以使用。


在第二和第三读,如果dlgCommon是一个像一分级结构的形式

dlgCommon: TdlgCommon 
    pnlAccounts: TPanel 
     AccountsGrid: TDBGrid 

看来,你曾经试图“撕出”(通过改变父母)的pnlAccounts,然后事件处理程序不起作用,就像您已经注意到的那样。

像这样改变组件父项的想法是一个非常糟糕的主意,因为当你为网格指定一个新的父项时,它现在不会再显示在dlgCommon中了。一次只能在一个对话框中看到它。

如果你想在网格同时各种形式的(至少)一些时间段可见,我仍然会用TFrame,因为我已经建议。

在这种情况下,你可以在形式

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

手动添加OnCellClick事件到形式的私人部分

procedure DBGridCellClick(Column: TColumn); 

并实现它,你实例化框架如下:

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模态。