【发布时间】:2016-10-04 02:02:00
【问题描述】:
我有一个带有 DBGrid 的 mainForm,我有一个带有 CheckListBox 的第二个表单,它显示所有 DBGrid 列供用户选择。我需要在 Form2 中引用 MainForm 中的 DBGrid。 我希望第二种形式能够处理连接到 dbdgrid 列的所有过程,以便我可以轻松地重用它。 这就是想法,但我没有找到传递 DBGrid 引用的方法。 有可能吗?
【问题讨论】:
我有一个带有 DBGrid 的 mainForm,我有一个带有 CheckListBox 的第二个表单,它显示所有 DBGrid 列供用户选择。我需要在 Form2 中引用 MainForm 中的 DBGrid。 我希望第二种形式能够处理连接到 dbdgrid 列的所有过程,以便我可以轻松地重用它。 这就是想法,但我没有找到传递 DBGrid 引用的方法。 有可能吗?
【问题讨论】:
回答您提出的问题,在您的 Form2 上定义一个属性
TForm2
[...]
private
FGrid : TDBGrid
public
property Grid : TDBGrid read FGrid write FGrid;
然后,在你创建了一个 TForm2 的实例之后,就这样做
Form2.Grid := MainForm.DBGrid1;
然后,在 Form2 上,您可以做任何您想做的有效更改 Grid 并且将对 MainForm.DBGrid1 进行更改。
【讨论】:
有可能吗?
问题应该是有没有更好的方法来实现我想要的?
Form2 基本上与不同形式的控件一起工作,它是否可以维护?如果其他表单也需要保存对其他表单上的组件的引用怎么办?回答这些问题应该有助于您寻找不同的方法。
你应该考虑separate UI and business logic。 TDBGrid 似乎是将数据从数据库获取到应用程序的便捷方式,但它违反了单一责任原则,因为它同时加载和显示数据。不要将它用作应用程序中的基本数据提供者。从软件的更深的 UI 独立层执行 SQL 查询。将结果存储在容器中,并以您想要的所有方式以不同的形式显示它们。
【讨论】: