自定义事件实现不同窗体间的通讯Delphi篇

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

[[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

时间: 2024-10-18 04:21:17

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

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

本篇笔记,主要阐明 事件是如何创建 和 如何使用自定义事件达到模块之间通讯 的效果. 句子解释: 什么叫做模块之间的通讯呢?? 简单点说,就是两个模块之间可以互相传数据. A模块 可以接收到 B模块的数据,这个就叫做通讯. 所以A模块注册了一个事件, B模块触发了这个事件,A接收到. 那么 这个就是A.B模块进行通讯了. 一.自定义事件的创建(代码例子在文章底部) 1.创建一个ActionScript类,继承Event 2.声明属性 2.1  保存数据的属性(事件保存数据的对象,可多个) 2.2

Flex中利用事件机制进行主程序与子窗体间参数传递

在开发具有子窗体,或者itemrenderer的应用时,常常涉及到子窗体向父窗体传递参数或者从itemrenderer内的控件向外部的主程序传递参数的需求.这些都可以通过事件机制这一统一方法加以解决.在我的应用中有两个需求: 1.左侧的List控件的itemrenderer中包含CheckBox控件,当其状态改变时需要同时改变主程序中的一个数组变量的内容:2.左下方的"新增届次"按钮会弹出一个窗口,窗口中输入届次信息后需要修改数据库中的表,同时表的更改结果要能够在List控件中体现出来

C# winform窗体间传值(使用委托或事件)

窗体间传值 今天得空,刚好看到网上好多人再找winform窗体间传值的问题,由于昨天项目的优化的感觉不错,就写了个C# winform窗体间传值的demo,希望能给需要的人的带来帮助: 工程的源代码地址:https://github.com/yes-or-no/WinFormTransValueDemoByDelOrEvent.git C#winform窗体间传值,三种方法示例,注释详细.使用方法:使用vs2013打开编译运行即可: 工程中总共介绍了三种方法:###方法1:通过保存对象的引用调用

Flex事件机制学习-自定义事件实现类间通信 .

今天,学习Flex自定义事件,可以使两个类通信,定义一个Main类. public class Main extends Sprite     {            public function Main()            { //演示ChildSprite类是与Main类通信,ChildSprite类稍后说明: var child:ChildSprite=new ChildSprite(); //指示该实例的属性值            child.flag="01";

C# 利用委托事件进行窗体间的传值(新手必看)

引言: 窗体间传值是每个学习WinForm新手的常见问题,最初级的方法就是 在窗体中先获取到要接受值窗体.然后通过.得到某个空间或者属性,直接赋值,这个需要接收放的窗体属性或者空间必须是public ,是极不安全的一种方式.在升级一下的新手做法就是在接受窗体中定义一个方法然后通过 调用这个方法来给某个控件或者属性赋值.这两种方法都是非安全的低级方式.非常不建议使用.本文我们讲讲如何通过委托事件(非单纯的委托)来解决窗体间信息传递的问题. 场景: 通过点击主主窗体From_Main的发送按钮,所有

Qt 学习之路:自定义事件

尽管 Qt 已经提供了很多事件,但对于更加千变万化的需求来说,有限的事件都是不够的.例如,我要支持一种新的设备,这个设备提供一种崭新的交互方式,那么,这种事件如何处理呢?所以,允许创建自己的事件 类型也就势在必行.即便是不说那种非常极端的例子,在多线程的程序中,自定义事件也是尤其有用.当然,事件也并不是局限在多线程中,它可以用在单线程的程序中,作为一种对象间通讯的机制.那么,为什么我需要使用事件,而不是信号槽呢?主要原因是,事件的分发既可以是同步的,又可以是异步的,而函数的调用或者说是槽的回调总

vue2.0中v-on绑定自定义事件的理解

vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定. 每个Vue实例都实现了[事件接口],即: 1.使用 $on(eventName) 监听事件 2.使用 $emit(eventName) 触发事件 父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件. html代码: 1 <div id="counter-event-example"> 2 <p>{{ total }}</p>

进程间的通讯(IPC)方式

为什么要进行进程间的通讯(IPC (Inter-process communication)) 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到.通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程).资源共享:多个进程之间共享同样的资源.为了作到这一点,需要内核提供锁和同步机制.进程控制:有些进程希望完全控制另一个进程的执行

进程间的通讯

进程间通讯机制总结             2013-02-01 17:25:57 分类: LINUX 进程在内核的协调下进行相互间的通讯,主要包括三种方式:信号.管道和套接口三大类. 信号 信号是Unix 系统中的最古老的进程间通讯方式.它们用来向一个或多个进程发送异步事件信号.信号可以从键盘中断中产生,另外进程对虚拟内存的非法存取等系统错误环境下也会有信号产生.信号还被shell 程序用来向其子进程发送任务控制命令. 系统中有一组被详细定义的信号类型,这些信号可以由核心或者系统中其它具有适当