自定义事件实现不同窗体间的通讯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
自定义事件实现不同窗体间的通讯Delphi篇的更多相关文章
- C# 动态创建出来的窗体间的通讯 delegate3
附件1:http://files.cnblogs.com/xe2011/CSharp_WindowsForms_delegate03.rar 一个RTF文件管理器 描述 Form2,Form3,For ...
- C# 动态创建出来的窗体间的通讯 delegate2
附件:http://files.cnblogs.com/xe2011/CSharp_WindowsForms_delegate02.rar 窗体2 和窗体3 都是动态创建出来的 现在 FORM3.TE ...
- C# 动态创建出来的窗体间的通讯 delegate1
附件 http://files.cnblogs.com/xe2011/CSharp_WindowsForms_delegate01.rar 需要每个窗体是独立存在,禁止相与引用窗体 这样干净并且可以反 ...
- C#窗体间传值的简便方法/工具
一.问题:窗体间传值必须需要窗体之间有联系,具体有如下方式 窗体间传值涉及到窗体A必须拥有窗体B,这样才可以实现A-B之间传值 窗体A与窗体B在窗体/实例C中,A-B可互相通讯 其他方式,不细讨论,复 ...
- Javascript自定义事件功能与用法实例分析
原文地址:https://www.jb51.net/article/127776.htm 本文实例讲述了javascript自定义事件功能与用法.分享给大家供大家参考,具体如下: 概述 自定义事件很难 ...
- 【教程】【FLEX】#003 自定义事件、模块间通讯
本篇笔记,主要阐明 事件是如何创建 和 如何使用自定义事件达到模块之间通讯 的效果. 句子解释: 什么叫做模块之间的通讯呢?? 简单点说,就是两个模块之间可以互相传数据. A模块 可以接收到 B模块的 ...
- 总结几种C#窗体间通讯的处理方法
摘要:本文介绍了C#窗体间通讯的几种处理方法,即传值.继承.事件回调,希望对大家有用. http://www.cnblogs.com/jara/p/3439603.html 应用程序开发中,经常需要多 ...
- vue_组件间通信:自定义事件、消息发布与订阅、槽
自定义事件 只能用于 子组件 向 父组件 发送数据 可以取代函数类型的 props 在父组件: 给子组件@add-todo-event="addTodo" 在子组件: 相关方法中, ...
- C#winform窗体用户控件自定义事件
C#许多事情都和事件有关系,大部分的事情我们可以通过C#自己的事件来完成,但如果我们自己新建了一个自定义控件,我们该如何定义自己想要的事件呢?下面我就来为大家粗略的讲解一番. 假设我们自定义了一个控件 ...
随机推荐
- C#经典系列-键值对
1.ToDictionary,ToLookup 从图中我们看到有四个ToXXX的方法,其中ToArray和ToList,用的是非常非常多 我们有这样的一个实体 class student { publ ...
- 通过百度获取IP地址对应的经纬度
/** * 获取指定IP对应的经纬度(为空返回当前机器经纬度) * * @param ip * @return */ public static String[] getIPXY(String ip ...
- Mvc中DropDownList 和DropDownListFor的常用方法
Mvc中DropDownList 和DropDownListFor的常用方法 一.非强类型: Controller:ViewData["AreId"] = from a in rp ...
- Flask-SQLAlchemy获取一个字段里去掉重复的数据
注意:可排序的列表内元素不可以是字典等复杂数据类型 比较容易记忆的是用内置的set l1 = ['b','c','d','b','c','a','a']l2 = list(set(l1))prin ...
- javascript 判断是否是数组
function isArray(object){ return object && typeof object==='object' && typeof object ...
- jvm之内存分配与回收策略
1.java堆中各代分布 (1)Young:主要是用来存放新生的对象. (2)Old:主要存放应用程序中生命周期长的内存对象. (3)Permanent:是指内存的永久保存区域,主要存放Class和M ...
- asp.net 负载均衡下session存储的解决方法
转自:http://www.cnblogs.com/david100zhang/archive/2011/12/28/2304917.html 在WEB场中,动态网页往往会因为几台主机做了负载而产生S ...
- 论文摘抄 - FlumeJava
本摘抄不保证论文完整性和理解准确性 原始的MapReduce.分Map,Shuffle,Reduce. Map里包含shards. Shuffle理解为groupByKey的事情.Reduce里包含 ...
- Java编程 的动态性,第 2部分: 引入反射--转载
在“ Java编程的动态性,第1部分,”我为您介绍了Java编程类和类装入.该篇文章介绍了一些Java二进制类格式的相关信息.这个月我将阐述使用Java反射API来在运行时接入和使用一些相同信息的基础 ...
- Android(java)学习笔记259:JNI之NDK开发步骤
1. NDK开发步骤(回忆一下HelloWorld案例): (1)创建工程 (2)定义native方法 (3)创建jni文件夹 (4)创建c源文件放到jni文件夹 (5)拷贝jni.h头文件到jni目 ...