自定义事件实现不同窗体间的通讯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#自己的事件来完成,但如果我们自己新建了一个自定义控件,我们该如何定义自己想要的事件呢?下面我就来为大家粗略的讲解一番. 假设我们自定义了一个控件 ...
随机推荐
- Java-装饰模式(转)
装饰模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关 ...
- 这是一个在Windows live 上实验的文章
这是一个windows 实验用的文章,希望一次成功
- [C#技术] .NET平台开源JSON库LitJSON的使用方法
一个简单示例: String str = "{’name’:’cyf’,’id’:10,’items’:[{’itemid’:1001,’itemname’:’hello’},{’itemi ...
- uva 10555 - Dead Fraction)(数论)
option=com_onlinejudge&Itemid=8&category=516&page=show_problem&problem=1496" st ...
- oracle REGEXP_SUBSTR实现字符串转列
如将字符串'张三,李四,王五,赵六,'转换成 1. 张三 2.李四 3.王五 4.赵六 REGEXP_SUBSTR 查询语句: WITH TEST AS (SELECT '张三,李四,王五,赵六, ...
- Android学习笔记(十一)——从意图返回结果
从意图返回结果 startActivity()方法调用还有一个活动,但并没有返回结果给当前活动.此时如想从一个活动中回传数据,就要使用startActivityForResult()方法. 点此获取完 ...
- C语言判断文件是否存在
用函数access,头文件是io.h,原型: int access(const char *filename, int amode); amode参数为0时表示检查文件的 ...
- 27个Jupyter Notebook使用技巧及快捷键(翻译版)
Jupyter Notebook Jupyter Notebook 以前被称为IPython notebook.Jupyter Notebook是一款能集各种分析包括代码.图片.注释.公式及自己画的图 ...
- Hadoop HA的搭建
1.首先添加hosts文件 vim /etc/hosts 192.168.0.1 MSJTVL-DSJC-H01 192.168.0.2 MSJTVL-DSJC-H03 192.168.0.3 MSJ ...
- vim命令---存阅
命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim ...