【问题标题】:Access DataModule's event from another Form (delphi design-time)从另一个表单访问 DataModule 的事件(delphi 设计时)
【发布时间】:2015-06-09 09:25:56
【问题描述】:

我想知道是否有任何方法可以将组件的事件(作为TButton.OnClick)链接到数据模块中定义的过程(在设计时)。 目前,我在运行时这样做:

MyButton.OnClick := MyDataModule.MyOnClickEvent;

目标是在对象检查器窗口的下拉列表中获得建议的 MyDataModule.MyOnClickEvent。 提前感谢所有分享他们知识的人:D

注意1: 这是一个类似的问题,但没有关于如何在设计时完成相同任务的信息: Access an event on a DataModule from another Form

注意2: 我发现的唯一方法是在父表单上定义所有事件,但我希望有一个更清洁的解决方案

【问题讨论】:

    标签: delphi events design-time datamodule object-inspector


    【解决方案1】:

    据我所知,这样的事情是不可能的。

    也许有一些插件,但我对此表示怀疑。为什么?

    想象一下,当您尝试在包含数百个表单和数千个事件的项目中使用类似的东西时会返回的所有混乱情况。

    另外,当您在不同的表单上使用同名的多个事件时,您将如何处理?

    【讨论】:

    • 我同意,带有“click”字样的数据模块的属性没有多大意义,因为在运行时在数据模块中没有什么可以点击...
    • 只有属于数据模块的事件才会被返回,这些数据模块的单元在uses子句中。就像组件一样,将数据模块的单元添加到使用子句后,您可以将表单的组件链接到数据模块的组件 -> 在下拉列表中,您可以看到“MyDataModule.MyComponent”。
    【解决方案2】:

    在 DataModule 中定义一个 published 方法来充当事件处理程序。它的签名必须匹配TNotifyEvent

    确保 DataModule 的单元位于组件父 Form 单元的 interface uses 子句中。

    确保在创建父表单之前创建 DataModule。

    【讨论】:

    • 在我添加的数据模块类中:发布的过程 OnClickTest(Sender : TObject);。在表单单元中,我添加了使用 uMyDataModuleUnit。 “OnClickTest”事件不在下拉列表中,我做错了什么吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-02-10
    • 2018-10-04
    • 1970-01-01
    • 2016-05-06
    • 2014-03-01
    • 2012-12-09
    • 2019-09-23
    • 1970-01-01
    相关资源
    最近更新 更多