Owner和Parent的区别:
Parent属性是指构件的包容器,构件只能在此范围内显示和移动。举例子如下:
(1)在Form1的窗体上,放一个Panel1,并将Panel1拉大,
(2)在Panel1上放一Button1;
(3)在Form1上放一Button2。
现在如果移动Panel1,则Button1随着Panel1移动,这是因为Button1的Parent是Panel1。现在将Button2移到Panel1上,再次移动Panel1,Button2并不跟着移动,这是因为Button2的Parent是Form1。除在窗体设计中,应注意构件的Parent是谁外,在动态创建构件时,也应指出构件的Parent,如在上例中继续操作:
Procedure Tform1.Button2click(Sender:Tobjet);
Var
Button:Tbutton;
Begin
Button:Tbutton.cerate(self);
Button.parent=panel1;
Button.lleft=0;
Button.top=0;
Button.caption:='OK';
End;
当按Button2时,将在Panel1上创建一个Button,而如果把第6句改为Button.parent:=self;按Button2时,将在Form1上创建一个Button了。如果将第6句删除,按Button2时,什么都不会发生,这是因为创建方法无法知道应在哪里显示构件。
Owner属性是指构件的所有者,它负责构件的创建和释放。如在上例中,系统默认窗体上所有构件的所有者是窗体,而窗体的所有者是Application。顺便指出,create方法应带有表示构件所有者的参数,如在上例中,构件所有者是窗体,即self。
Parent属性和Owner属性是运行阶段的属性,只能在运行阶段,通过代码设置。
Self和Sender的区别
在事件处理程序参数表中,至少含有一个参数Sender,它代表触发事件处理程序的构件,如在上例中,Sender就指Button2,有了Sender参数,可以使多个构件共用相同的事件处理程序,如下例:
Procedure Tform1.Buttonclick(Sender:Tobject);
Begin
If sender=button1 then
Label1.caption:='看庭前花开花落 '
Else Label2.caption:='望天上云卷云舒'
End;
在此例中,Button1,Button2共用了Buttonclick事件处理程序。
Self是指所编的程序范围是在哪一个类中,Delphi中大都在窗体范围内编程,因此,self即指窗体,如果在编写一个类或是一个组件,则self指该类或组件。我们在函数或过程的声明中可看出self是代表哪个组件,即self代表‘.’号之前的组件,如在第一个例子中,self代表Tform1。另外应注意,self只能用在类方法中,而不能用在过程或函数中,如下例用法是错的:
Function a1(B:Integer):Integer;
Begin
……
Button:=tbutton.create(self);……
End;
-----------------------------------------------------
Sender,Self,Owner,parent
-----------------------------------------------------
Sender--意义:指本对象。Sender在什么对象相关代码里,那么Sender就是什么。
Self--意义:指本类,也就是Self被引用的类。比如若在类TMyClass内引用了Self,那么Self=TMyClass.
Owner--意义:哪个对象释放我的内存啊?
如:Pan:=TPanel.Create(Self);其中Create的参数是:AOwner:TComponent。Owner释放Pan的内存。因为窗口释放Pan的内存,但窗口类的对象是Self.一般给Owner传Self就可以。
比如:
代码段一:
pan:=TPanel.Create(Self);
with Pan do begin
try
Left:=20;
Top:=20;
parent:=Self; //Parent:=Form1也可以。
Visible:=true;
ShowMessage('Created');
finally
Pan.free;
end;
end;
-----------------------------------------------------
Parent--
意义:此对象包括在哪个对象里那?
说明:若组件不是从TControl继承来的,那么在创建组件后不必声明此属性。
parent 与owner的含义区别及举例
=================================================================
{ 单元文件名称: Unit1
开发人员名称: tulater
编写日期: 25-八月-2005
单元功能:
parent即 养父
是指拥有该组件的父类,即parent组件必定是一个窗口控制组件(Windowed control) 由于组件就是容纳该组件的父类,因此当父类移动时,附着其内的组件也会移动.
Object TreeVIew 里表示的就是这种关系.
修改历史:
-----------------------------------------------------------------------------}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button5Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
VAR
PB: boolean;
{$R *.dfm}
procedure TForm1.Button5Click(Sender: TObject);
begin
Form2.show
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
GroupBox1.Top := GroupBox1.Top - 10;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if PB then
BEGIN
Button2.Parent := Form2;
PB := false;
END
else
BEGIN
Button2.Parent := Form1.GroupBox1;
PB := true;
END;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Pb := false;
end;
end.
=================================================================
{-----------------------------------------------------------------------------
单元文件名称: Unit1
开发人员名称: tulater
编写日期: 25-八月-2005
单元功能:
Owner 生父
何谓 Owner?就组件而言 , Owner是指作为其他组件的Owner的父组件,在负责自身 析构时,一起析构它所拥有的其下所Own 的组件,也就是于此时释放它自己与它所拥有 组件所占的内存.
修改历史:
-----------------------------------------------------------------------------}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
unit2;
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.show
end;
end.
=================================================================
相关推荐
语言:English 将Whatsapp消息发送给单个用户或总和发送给用户,而不保存号码 使用whatsapp网站上的免费whatsapp消息传递功能,免费发送whatsapp消息并在whatsapp上将用户连接起来。 注意:1.这是WhatsApp网站的非...
UDPSender是一款强大的UDP(User Datagram Protocol)测试和压力测试工具,主要针对网络通信性能进行评估。UDP是一种无连接的、不可靠的传输层协议,常用于需要高速传输但对数据完整性要求不高的应用,如在线游戏、...
UDP Sender,正如其名,是一个用于发送UDP数据包的工具或程序。在这个“发包器_udp_sender.rar”压缩包中,我们很可能是得到了一个能够帮助我们测试网络性能、进行网络诊断或者进行UDP数据传输实验的软件。 UDP ...
### 浅析C# 中object sender与EventArgs e #### 一、C# 预定义事件处理机制概览 在深入了解C#中的`object sender`与`EventArgs e`之前,我们首先需要理解.NET框架中与事件相关的类和委托的基础概念。 在C#中,...
UDP Sender是一款专为网络调试和日志记录设计的发包工具,主要功能是通过UDP协议发送syslog消息。Syslog是一种广泛使用的系统日志协议,适用于网络设备、服务器和应用程序,用于收集和集中管理日志信息。理解UDP ...
UDPSender发包工具是一款专用于发送数据流到指定服务器的实用程序,主要应用于网络安全测试、网络性能评估以及协议分析等领域。在理解UDPSender的工作原理和应用之前,我们需要先了解UDP(用户 datagram 协议)的...
《Perl模块Mail-Sender-0.8.22:SMTP邮件发送详解》 在IT行业中,Perl语言以其强大的文本处理能力和灵活的语法深受程序员喜爱。而`Mail-Sender`是Perl社区中一个非常实用的模块,它简化了通过SMTP协议发送电子邮件...
【Sender/Receiver 消息】在Java消息服务(JMS)中,Sender和Receiver是两个基本的概念,它们分别代表消息的生产者和消费者。Sender负责创建并发送消息,而Receiver则负责接收和处理这些消息。在JMS中,消息传递是...
UDP sender,通过UDP协议发送信息的软件。
PostgreSQL Walsender PostgreSQL Walsender 是 PostgreSQL 数据库中的一种机制,用于实现数据复制和高可用性。它通过 WAL(Write-Ahead Log)机制来实现数据复制,WAL 是一种日志记录机制,记录了所有对数据库的...
UDPSender UDP发包工具,支持自动及手动发送,可以进行压力测试等
UDPSender发包器是一款开源的UDP(User Datagram Protocol)数据传输工具,专为网络通信测试和调试设计。它不仅能够发送UDP数据包,还具备接收数据包的功能,使得用户可以全面地测试网络的UDP通信性能。在众多的发包...
《sender:一个VB编写的网站数据发送工具》 在信息技术领域,数据的传输与交互是不可或缺的一环。本文将深入探讨一款名为“sender”的工具,它由VB(Visual Basic)编程语言编写,专用于发送数据并测试网站功能。...
mirrorop sender PC发射端
UDPSender是一款基于UDP协议的实用工具,主要用于UDP数据包的发送,它具备自动和手动发送功能,能够进行网络性能的压力测试。 在UDPSender这款工具中,用户可以: 1. **配置目标IP和端口**:在使用UDPSender时,你...
public delegate void EventHandler(object sender, EventArgs e); ``` 这里,`sender`参数是一个对象,它代表引发事件的源对象。例如,如果是一个按钮的点击事件,`sender`就是那个按钮对象。`e`参数则是`...
Universal Gcode Sender使用Maven构建项目。它使用maven模块来分离核心库/经典GUI和UGS平台项目。在最高级别,UGS目标定义 ugs-core和ugs-platform-parent模块,可以分别或全部构建它们。 经典gui是ugs-core模块中...
数据包发送工具packetSender
mirrorop sender安卓破解版是一款非常实用的闪电传输文件应用。使用mirrorop sender apk能够实现多屏互动,多平台之间的文件传输、分享,传输速度更快! 注:资源来源于网络。
private void Form2_FormClosing(object sender, FormClosingEventArgs e) { Owner.Close(); } ``` 8. **使用委托和事件**:除了构造函数,还可以使用委托和事件来传递更复杂的数据。在`Form2`中定义一个事件...