要实现子窗体与父窗体之间的通讯,有多种方法(比如:重载子窗体的构造函数,将父窗体的引用作为参数传递给子窗体)。下面我要介绍的是利用自定义事件的方法,它能够最大程度的避免模块之间的耦合,充分体现面向对象的优点。
  先将效果图展示给大家:
  

[[The No.1 Picture.]]

  下面是实现代码:
  
  Unit2 //子窗体
  
  type
  //声明自定义事件的类型(类似于C#中的委托)
  TMyEventHandle = procedure (Sender: TObject; Content: string) of object;
  
  TForm2 = class(TForm)
  ComboBox1: TComboBox;
  Label1: TLabel;
  procedure ComboBox1Click(Sender: TObject);
  private
  FOnSelectionChanged: TMyEventHandle;
  public
  //声明自定义事件
  property OnSelectionChanged: TMyEventHandle
  read FOnSelectionChanged write FOnSelectionChanged;
  end;
  
  procedure TForm2.ComboBox1Click(Sender: TObject);
  begin
  //当选择改变时,触发自定义的事件
  if Assigned(FOnSelectionChanged) then
  FOnSelectionChanged(Self, ComboBox1.Text);
  end;
  
  Unit1 //父窗体
  
  type
  TForm1 = class(TForm)
  btnOpenForm2: TButton;
  Edit1: TEdit;
  Label1: TLabel;
  procedure btnOpenForm2Click(Sender: TObject);
  private
  m_frm2: TForm2;
  
  procedure frm2_SelectionChanged(Sender: TObject; Content: string);
  public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
  end;
  
  constructor TForm1.Create(AOwner: TComponent);
  begin
  inherited Create(AOwner);
  
  m_frm2 := TForm2.Create(Self);
  
  //指定当m_frm2的自定义事件发生时的处理程序
  m_frm2.OnSelectionChanged := frm2_SelectionChanged;
  end;
  
  destructor TForm1.Destroy;
  begin
  m_frm2.Free;
  
  inherited Destroy;
  end;
  
  procedure TForm1.frm2_SelectionChanged(Sender: TObject; Content: string);
  begin
  Edit1.Text := Content;
  end;
  
  procedure TForm1.btnOpenForm2Click(Sender: TObject);
  begin
  m_frm2.ShowModal;
  end;

http://m.ithao123.cn/content-7386687.html

自定义事件实现不同窗体间的通讯Delphi篇的更多相关文章

  1. C# 动态创建出来的窗体间的通讯 delegate3

    附件1:http://files.cnblogs.com/xe2011/CSharp_WindowsForms_delegate03.rar 一个RTF文件管理器 描述 Form2,Form3,For ...

  2. C# 动态创建出来的窗体间的通讯 delegate2

    附件:http://files.cnblogs.com/xe2011/CSharp_WindowsForms_delegate02.rar 窗体2 和窗体3 都是动态创建出来的 现在 FORM3.TE ...

  3. C# 动态创建出来的窗体间的通讯 delegate1

    附件 http://files.cnblogs.com/xe2011/CSharp_WindowsForms_delegate01.rar 需要每个窗体是独立存在,禁止相与引用窗体 这样干净并且可以反 ...

  4. C#窗体间传值的简便方法/工具

    一.问题:窗体间传值必须需要窗体之间有联系,具体有如下方式 窗体间传值涉及到窗体A必须拥有窗体B,这样才可以实现A-B之间传值 窗体A与窗体B在窗体/实例C中,A-B可互相通讯 其他方式,不细讨论,复 ...

  5. Javascript自定义事件功能与用法实例分析

    原文地址:https://www.jb51.net/article/127776.htm 本文实例讲述了javascript自定义事件功能与用法.分享给大家供大家参考,具体如下: 概述 自定义事件很难 ...

  6. 【教程】【FLEX】#003 自定义事件、模块间通讯

    本篇笔记,主要阐明 事件是如何创建 和 如何使用自定义事件达到模块之间通讯 的效果. 句子解释: 什么叫做模块之间的通讯呢?? 简单点说,就是两个模块之间可以互相传数据. A模块 可以接收到 B模块的 ...

  7. 总结几种C#窗体间通讯的处理方法

    摘要:本文介绍了C#窗体间通讯的几种处理方法,即传值.继承.事件回调,希望对大家有用. http://www.cnblogs.com/jara/p/3439603.html 应用程序开发中,经常需要多 ...

  8. vue_组件间通信:自定义事件、消息发布与订阅、槽

    自定义事件 只能用于 子组件 向 父组件 发送数据 可以取代函数类型的 props 在父组件: 给子组件@add-todo-event="addTodo" 在子组件: 相关方法中, ...

  9. C#winform窗体用户控件自定义事件

    C#许多事情都和事件有关系,大部分的事情我们可以通过C#自己的事件来完成,但如果我们自己新建了一个自定义控件,我们该如何定义自己想要的事件呢?下面我就来为大家粗略的讲解一番. 假设我们自定义了一个控件 ...

随机推荐

  1. Magician - hdu 5316 (区间查询合并)

    题意:有一个区间,然后有两种操作 1. 把a处的值改为b 0,查询区间ab的子序列的最大和,这个比较特殊,子序列里面相邻的数要有不同的奇偶性 ***************************** ...

  2. Java笔记6之三目运算符

    /*    单目运算符:~3    双目运算符:3 + 4    三目运算符:        格式:比较表达式?表达式1:表达式2;                比较表达式:结果是一个boolean ...

  3. 用endsWith()来限制图片的后缀名

    var a=document.getElementById('file-name'); var filename=a.value if(!a.endsWith('.jpg')||!a.endsWith ...

  4. get client machine name

    System.Net.Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName;

  5. ApiDemos-->Views-lists-slow adapter学习

    今天来依照apidemos提供的方法来实现slow loading的效果. 简单说下实现方法: 实现ListView.OnScrollListener ,监听到手势滑动的情况,当处于滚动状态时,将新显 ...

  6. 判断两条直线的位置关系 POJ 1269 Intersecting Lines

    两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...

  7. QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码

    OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. QQ登录OAuth2 ...

  8. mongodb的地理空间索引如何在solr中体现

    "$near"是唯一一个会对查询结果进行自动排序的地理空间操作符 "$near"的返回结果是按照距离由近及远排序的.其他排序条件不会生效. 这种按照地理位置远近 ...

  9. location.href的用法

    *.location.href 用法: top.location.href=”url”          在顶层页面打开url(跳出框架) self.location.href=”url”       ...

  10. java中的final, finally, finalize的区别

    final修饰符(关键字),如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为abstract的,又被声明为final的.将变量或方法声明为fin ...