类:初识类的事件

先勾画一下思路:
1、建立一个类, 里面有年龄字段 FAge;
2、通过 Age 属性读写 FAge;
3、如果输入的年龄刚好是 100 岁, 将会激发一个事件, 这个事件我们给它命名为: OnHundred

 

ContractedBlock.gif ExpandedBlockStart.gif Code
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 
= class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    
procedure Button1Click(Sender: TObject);
    
procedure Button2Click(Sender: TObject);
    
procedure Button3Click(Sender: TObject);
  
private
    
{ Private declarations }
  
public
    
{ Public declarations }
  
end;

  
//先定义一个特殊的类型,一个对象所属的过程类型,这就是建立一个事件的前提
  TMyEvent 
= procedure of Object;

  TMyClass 
= class
  strict 
private
    FAge: Integer; 
//年龄字段
    FOnHundred: TMyEvent; 
//为我们刚刚定义的TMyEvent类型指定一个变量:FOnHundred
    
procedure SetAge(const Age: Integer);
  
public
    
procedure SetOnHundred1; //建立事件要调用的过程
    
procedure SetOnHundred2; //建立事件要调用的过程
    
constructor Create;
    
property Age: Integer read FAge write SetAge;
    
property OnHundred: TMyEvent read FOnHundred write FOnHundred; //其它事件也是属性,事件命名一般由On开始
  
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TMyClass }

constructor TMyClass.Create;
begin
  FOnHundred :
= SetOnHundred1; //在对象建立时,我们先让事件调用 SetOnHundred1方法
end;

procedure TMyClass.SetAge(const Age: Integer);
begin
 
if (Age > 0and (Age < 200then FAge := Age;
 
if Age = 100 then OnHundred; //当输入的年龄是100岁时,激活事件

end;

procedure TMyClass.SetOnHundred1;
begin
  ShowMessage(
'祝您100岁大寿!');
end;

procedure TMyClass.SetOnHundred2;
begin
  ShowMessage(
'但愿我们都能活到100岁。');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyClass: TMyClass;
begin
  MyClass :
= TMyClass.Create;
  MyClass.Age :
= 99//如果年龄不是负数而又小于200
  ShowMessage(IntToStr(MyClass.Age)); 
//99 对象就接受了
  MyClass.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  MyClass: TMyClass;
begin
  MyClass :
= TMyClass.Create;
  MyClass.Age :
= 100;
  MyClass.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  MyClass: TMyClass;
begin
  MyClass :
= TMyClass.Create;
  MyClass.OnHundred :
= MyClass.SetOnHundred2; //让事件指定另一个方法
  MyClass.Age :
= 100//这时会激活事件,弹出对话框:但愿我们都能活到100岁
  MyClass.Free;
end;

end.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值