unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, ExtCtrls, StdCtrls,
  Dialogs;type
  TFramePanel = class(TPanel)
  private
    FTxtList: TList;
    FMClick: TNotifyEvent;
    procedure SetMClick(const Value: TNotifyEvent);
  public
    constructor Create(AOwner:TComponent); override;
    destructor Destroy; override;
  published
    property OnMClick: TNotifyEvent read FMClick write SetMClick;
  end;implementation{ TFramePanel }constructor TFramePanel.Create(AOwner: TComponent);
var
  TxtObj:TLabel;
begin
  inherited Create(AOwner);
  FTxtList:=TList.Create;
  TxtObj:=TLabel.Create(Self);
  TxtObj.Parent:=Self;
  TxtObj.Caption:='AAAAAAAAA';
  TxtObj.Left:=10;
  TxtObj.Top:=10;
  FTxtList.Add(TxtObj);
  TxtObj:=nil;  TxtObj:=TLabel.Create(Self);
  TxtObj.Parent:=Self;
  TxtObj.Caption:='BBBBBBBBB';
  TxtObj.Left:=100;
  TxtObj.Top:=10;
  FTxtList.Add(TxtObj);
  TxtObj:=nil;
end;destructor TFramePanel.Destroy;
var
  i:Integer;
  TxtObj:TLabel;
begin
  for i:=0 to Pred(FTxtList.Count) do begin
    TxtObj:=TLabel(FTxtList.Items[i]);
    if Assigned(TxtObj) then TxtObj.Free;
  end;
  FTxtList.Free;
  inherited;
end;procedure TFramePanel.SetMClick(const Value: TNotifyEvent);
var
  i:Integer;
begin
  FMClick := Value;
  for i:=0 to Pred(FTxtList.Count) do TLabel(FTxtList.Items[i]).OnClick:=FMClick;
end;end.问题:我在SetMClick中将所有的Label对象的Click事件链接到FMClick怎么没有效果,只有点击Panel有效,请问这是什么原因?

解决方案 »

  1.   

    事件函数是你自己写的吧?建议你选择一个Label后双击其OnClick事件,填充代码后,把其他的Label都指向这个OnClick事件就可以了。
      

  2.   

    1.
     FTxtList.Add(TxtObj); 
     TxtObj:=nil; //这里已经释放了列表对象了
    2.你所说的在函数SetMClick中已链接到所有Lable对象,但你的代码中没有体现出何时调用SetMClick这个函数呀,也就是说你根本没有执行“链接到所有Lable对象”这个操作。如果你的类由其它对象来调用,必须保证这个函数被真正执行过
      

  3.   

    constructor TFramePanel.Create(AOwner: TComponent);
    var
      TxtObj:TLabel;
    begin
      inherited Create(AOwner);
      FTxtList:=TList.Create;
      TxtObj:=TLabel.Create(Self);
      TxtObj.Parent:=Self;
      TxtObj.Caption:='AAAAAAAAA';
      TxtObj.Left:=10;
      TxtObj.Top:=10;
      TxtObj.OnClick := FMClick;
      FTxtList.Add(TxtObj);
      TxtObj:=nil;  TxtObj:=TLabel.Create(Self);
      TxtObj.Parent:=Self;
      TxtObj.Caption:='BBBBBBBBB';
      TxtObj.Left:=100;
      TxtObj.Top:=10;
      TxtObj.OnClick := FMClick;
      FTxtList.Add(TxtObj);
      TxtObj:=nil;
    end;