首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个窗体访问DataModule上的事件

从另一个窗体访问DataModule上的事件
EN

Stack Overflow用户
提问于 2009-05-25 14:02:52
回答 3查看 2.6K关注 0票数 3

在Delphi2009中,我有一个带有过程MyProcedure的表单,它可以写入表单上的标签。表单使用DataModule和ClientDataSet。当触发ClientDataSet的ClientDataSet事件时,应该执行MyProcedure。为了避免循环引用,更重要的是,由于我希望DataModule是可重用的,所以DataModule不应该引用这个特定的表单。

简而言之,我希望我可以从我的表单中访问AfterScroll事件。我能否从我的表单中连接DataModule上的后滚动事件?我认为这应该是可能的,但我想不起来该怎么做了。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-25 14:18:04

您在DataModule中放置了一个事件属性:

代码语言:javascript
复制
private
FOnAfterScroll : TNotifyEvent;
public
property OnAfterScroll   : TNotifyEvent read FOnAfterScroll write FOnAfterScroll;

然后在AfterScroll过程中调用DataModule中的事件:

代码语言:javascript
复制
If Assigned(FOnAfterScroll) then FOnAfterScroll(Self);

形式:声明事件处理程序

代码语言:javascript
复制
procedure HandleAfterScroll(Sender : TObject);

然后将一个过程分配给DataModule的OnAfterScroll

.关于:= MyHandleAfterScroll;

另一种方法是从DataModule发送自定义窗口消息,并在表单中响应该消息。

票数 6
EN

Stack Overflow用户

发布于 2009-05-25 14:15:34

应该是这样的:

代码语言:javascript
复制
procedure TForm1.FormCreate(Sender: TObject);
begin
  DataModule1.MyCDS.AfterScroll := MyAfterScrollHandler;
end;
票数 2
EN

Stack Overflow用户

发布于 2009-05-25 14:23:24

如果您只想在一个不同的单元(如表单)中声明事件处理程序,那么就按照Ulrich的建议去做。如果希望能够在数据模块中放置默认事件处理程序,但又能够扩展其行为,则需要做更多的工作。您可以通过向数据模块添加一个事件来做到这一点。

使用适当的签名定义方法指针,并在公共范围内向数据模块添加一个指针,如下所示:

代码语言:javascript
复制
type
  TMyEvent = procedure({arg list here}) of object;

  TMyDataModule = class(TDataModule)
  //definition goes here
    procedure MyTableAfterScroll({arg list here});
  private
    FExternalEvent: TMyEvent;
  public
    property ExternalEvent: TMyEvent read FMyEvent write FMyEvent
  end;

implementation

procedure TMyDataModule.MyTableAfterScroll({arg list here});
begin
  //do whatever
  if assigned(FExternalEvent) then
    FExternalEvent({whatever arguments});
  //do more stuff, if you'd like
end;

要将其连接起来,在表单的OnCreate中,只需将您的过程分配给MyDataModule.ExternalEvent,就可以了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/906853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档