`
美丽的小岛
  • 浏览: 309327 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Owner、Parent、Self、Sender

 
阅读更多

OwnerParent的区别
Parent
属性是指构件的包容器,构件只能在此范围内显示和移动。举例子如下: 
  (1)Form1的窗体上,放一个Panel1,并将Panel1拉大, 
  (2)Panel1上放一Button1 
  (3)Form1上放一Button2 
  现在如果移动Panel1,Button1随着Panel1移动,这是因为Button1ParentPanel1。现在将Button2移到Panel1上,再次移动Panel1,Button2并不跟着移动,这是因为Button2ParentForm1。除在窗体设计中,应注意构件的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:TComponentOwner释放Pan的内存。因为窗口释放Pan的内存,但窗口类的对象是Self.一般给OwnerSelf就可以。
比如:
代码段一:
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.
=================================================================

 

 

分享到:
评论

相关推荐

    WA Self Sender - Send Messages Free-crx插件

    语言:English 将Whatsapp消息发送给单个用户或总和发送给用户,而不保存号码 使用whatsapp网站上的免费whatsapp消息传递功能,免费发送whatsapp消息并在whatsapp上将用户连接起来。 注意:1.这是WhatsApp网站的非...

    UDPSender发包器工具

    UDPSender是一款强大的UDP(User Datagram Protocol)测试和压力测试工具,主要针对网络通信性能进行评估。UDP是一种无连接的、不可靠的传输层协议,常用于需要高速传输但对数据完整性要求不高的应用,如在线游戏、...

    发包器_udp_sender.rar

    UDP Sender,正如其名,是一个用于发送UDP数据包的工具或程序。在这个“发包器_udp_sender.rar”压缩包中,我们很可能是得到了一个能够帮助我们测试网络性能、进行网络诊断或者进行UDP数据传输实验的软件。 UDP ...

    浅析C# 中object sender与EventArgs e

    ### 浅析C# 中object sender与EventArgs e #### 一、C# 预定义事件处理机制概览 在深入了解C#中的`object sender`与`EventArgs e`之前,我们首先需要理解.NET框架中与事件相关的类和委托的基础概念。 在C#中,...

    UDPSender 发包工具 upd syslog

    UDP Sender是一款专为网络调试和日志记录设计的发包工具,主要功能是通过UDP协议发送syslog消息。Syslog是一种广泛使用的系统日志协议,适用于网络设备、服务器和应用程序,用于收集和集中管理日志信息。理解UDP ...

    UDPSender发包工具.zip

    UDPSender发包工具是一款专用于发送数据流到指定服务器的实用程序,主要应用于网络安全测试、网络性能评估以及协议分析等领域。在理解UDPSender的工作原理和应用之前,我们需要先了解UDP(用户 datagram 协议)的...

    Mail-Sender-0.8.22

    《Perl模块Mail-Sender-0.8.22:SMTP邮件发送详解》 在IT行业中,Perl语言以其强大的文本处理能力和灵活的语法深受程序员喜爱。而`Mail-Sender`是Perl社区中一个非常实用的模块,它简化了通过SMTP协议发送电子邮件...

    Sender-receiver 消息

    【Sender/Receiver 消息】在Java消息服务(JMS)中,Sender和Receiver是两个基本的概念,它们分别代表消息的生产者和消费者。Sender负责创建并发送消息,而Receiver则负责接收和处理这些消息。在JMS中,消息传递是...

    UDP_Sender调试助手

    UDP sender,通过UDP协议发送信息的软件。

    postgresql walsender

    PostgreSQL Walsender PostgreSQL Walsender 是 PostgreSQL 数据库中的一种机制,用于实现数据复制和高可用性。它通过 WAL(Write-Ahead Log)机制来实现数据复制,WAL 是一种日志记录机制,记录了所有对数据库的...

    UDPSender UDP发包工具

    UDPSender UDP发包工具,支持自动及手动发送,可以进行压力测试等

    UDPSender发包器

    UDPSender发包器是一款开源的UDP(User Datagram Protocol)数据传输工具,专为网络通信测试和调试设计。它不仅能够发送UDP数据包,还具备接收数据包的功能,使得用户可以全面地测试网络的UDP通信性能。在众多的发包...

    网站数据发送工具sender

    《sender:一个VB编写的网站数据发送工具》 在信息技术领域,数据的传输与交互是不可或缺的一环。本文将深入探讨一款名为“sender”的工具,它由VB(Visual Basic)编程语言编写,专用于发送数据并测试网站功能。...

    Universal Gcode Sender v2.0

    Universal Gcode Sender使用Maven构建项目。它使用maven模块来分离核心库/经典GUI和UGS平台项目。在最高级别,UGS目标定义 ugs-core和ugs-platform-parent模块,可以分别或全部构建它们。 经典gui是ugs-core模块中...

    mirrorop sender PC发射端

    mirrorop sender PC发射端

    UDPSender.rar

    UDPSender是一款基于UDP协议的实用工具,主要用于UDP数据包的发送,它具备自动和手动发送功能,能够进行网络性能的压力测试。 在UDPSender这款工具中,用户可以: 1. **配置目标IP和端口**:在使用UDPSender时,你...

    浅析C#中object-sender与EventArgs-e

    public delegate void EventHandler(object sender, EventArgs e); ``` 这里,`sender`参数是一个对象,它代表引发事件的源对象。例如,如果是一个按钮的点击事件,`sender`就是那个按钮对象。`e`参数则是`...

    packetSender.源码

    数据包发送工具packetSender

    Mirrorop sender for android

    mirrorop sender安卓破解版是一款非常实用的闪电传输文件应用。使用mirrorop sender apk能够实现多屏互动,多平台之间的文件传输、分享,传输速度更快! 注:资源来源于网络。

    C# WinForm 之间调用、传递参数的例子 Owner

    private void Form2_FormClosing(object sender, FormClosingEventArgs e) { Owner.Close(); } ``` 8. **使用委托和事件**:除了构造函数,还可以使用委托和事件来传递更复杂的数据。在`Form2`中定义一个事件...

Global site tag (gtag.js) - Google Analytics