首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

小弟我想获取Panel的Caption变化情况,就像Edit的chang事件发生一样

2012-02-22 
我想获取Panel的Caption变化情况,就像Edit的chang事件发生一样我想做一个功能,就是当panel的Caption变化的

我想获取Panel的Caption变化情况,就像Edit的chang事件发生一样
我想做一个功能,就是当panel的Caption变化的时候,能够获取Caption的内容,我的想法是模仿Edit的OnChange事件,当Edit的内容变化的时候,就发生这个事件,就是另外做一个Panel控件,增加一个OnChange事件,跟踪Edit的OnChange源码有些地方不明白,不知道什么地发生了Text变化内容的判断,也看不到对消息的处理方法,请大家指点一二,或者有什么别的方法判断Panel的Caption变化了

Delphi(Pascal) code
第一步:TCustomEdit = class(TWinControl)protectedprocedure Change; dynamic;procedure TCustomEdit.Change;begin  inherited Changed;  if Assigned(FOnChange) then FOnChange(Self);end;第二步:procedure TControl.Changed;begin  Perform(CM_CHANGED, 0, Longint(Self)); //这里的self是edit1 还是 TControl?end;第三步:function TControl.Perform(Msg: Cardinal; WParam, LParam: Longint): Longint;var  Message: TMessage;begin  Message.Msg := Msg;  Message.WParam := WParam;  Message.LParam := LParam;  Message.Result := 0;  if Self <> nil then WindowProc(Message);//为什么要在这里进行判断?  Result := Message.Result;end;第四步:不知道怎么跟踪了,看了一下WindowProc是一个处理过程类属性找到的一个CMchanged处理的方法在TWinControlprocedure TWinControl.CMChanged(var Message: TMessage);begin  if FParent <> nil then FParent.WindowProc(Message);end;应该不属于第四步吧,因为TWinControl是从TControl继承过来的


[解决办法]
提供一个setCaption的方法,外部只能通过它去修改caption
然后在setCaption里触发OnChange事件
[解决办法]
提供一个setCaption的方法,外部只能通过它去修改caption
然后在setCaption里触发OnChange事件
支持二楼的做法,这样比较简单易用。
[解决办法]
一个类的实例可以有很多个,但它们都是同一级的
一个类的基类可以有好几个,它们都不是同一级的
self是实例的指针,都是同一级的,但是不同个,也就是属性的具体值会不同

基类的属性,子类好像无法再定义一个同名的属性——准确度80%
方法倒是可以重载或覆盖——准确度80%
一般是 Tfatherclass(self).samefun(...)——准确度50%
常用的是一个保留字:inherited 来指代——准确度60%
[解决办法]
如果只是处理个别TPanel对象,可以直接在from中写代码:

Delphi(Pascal) code
unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ExtCtrls, StdCtrls;type  TPanel = class(ExtCtrls.TPanel)  private    FOnChange: TNotifyEvent;    procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;  public    property OnChange:TNotifyEvent read FOnChange write FOnChange;  end;  TForm1 = class(TForm)    Panel1: TPanel;    Button1: TButton;    procedure FormCreate(Sender: TObject);    procedure Button1Click(Sender: TObject);  private    { Private declarations }    procedure PanelTextChange(Sender: TObject);  public    { Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}{ TPanel }procedure TPanel.CMTextChanged(var Message: TMessage);begin  if Assigned(FOnChange) then // 这里激发事件,也可直接在这里写处理代码    FOnChange(Self);  inherited;end;{ TForm1 }procedure TForm1.PanelTextChange(Sender: TObject);begin  ShowMessage(Panel1.Caption);end;procedure TForm1.FormCreate(Sender: TObject);begin  Panel1.OnChange := PanelTextChange;end;procedure TForm1.Button1Click(Sender: TObject);begin  Panel1.Caption := '1234567890';end;end. 

热点排行