Delphi 从内部组件传播事件

Delphi 从内部组件传播事件,delphi,events,Delphi,Events,我正在编写一个包含少数组件的组件 TMyComponent = class(TPanel) private fGrid : TExCustomDBGrid; fOnCellClick : TDBGridClickEvent; public constructor Create(AOwner: TComponent); override; published property OnCellClick: TDBGridClickEvent read FOn

我正在编写一个包含少数组件的组件

TMyComponent = class(TPanel)
  private
    fGrid : TExCustomDBGrid;
    fOnCellClick : TDBGridClickEvent;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property OnCellClick: TDBGridClickEvent read FOnCellClick write FOnCellClick;
  End;
...
constructor TMyComponent .Create(AOwner: TComponent);
begin
  inherited;
  fGrid := TExCustomDBGrid.Create(self);
  fGrid.parent := self;
  fGrid.Align := alClient;
end;
我希望能够将事件从组件(TPanel)传播到包含的fGrid。 我怎样才能达到这个目标


我想我应该在TPanel上声明一个类型相同的事件(作为容器组件)。那么如何传播到fGrid中呢?

您的要求有点不清楚,但是根据我看到的代码,编写一个事件处理程序并将其分配给网格

procedure TMyComponent.DBGridCellClicked(Column: TColumn);
begin
  if Assigned(fOnCellClick) then
    fOnCellClick(Column);
end;

constructor TMyComponent.Create(AOwner: TComponent);
begin
  inherited;
  fGrid := TExCustomDBGrid.Create(self);
  fGrid.Parent := self;
  fGrid.Align := alClient;
  fGrid.OnCellClick := DBGridCellClicked;
end;

有点不清楚您在问什么,但根据我看到的代码,编写一个事件处理程序并将其分配给网格

procedure TMyComponent.DBGridCellClicked(Column: TColumn);
begin
  if Assigned(fOnCellClick) then
    fOnCellClick(Column);
end;

constructor TMyComponent.Create(AOwner: TComponent);
begin
  inherited;
  fGrid := TExCustomDBGrid.Create(self);
  fGrid.Parent := self;
  fGrid.Align := alClient;
  fGrid.OnCellClick := DBGridCellClicked;
end;

我假设我的答案就是你想要的,但你似乎在反向描述传播,这有点让人困惑。你不是从面板传播到网格,而是从网格传播到面板。你是对的。事实上我想在我的TPanel中有一个事件,它将在DBGrid.OnCellClick事件被raize之后调用。要执行我在TPanel.OncellClick事件中输入的代码,我假设我的答案就是您所寻找的,但您似乎在反向描述传播,这有点令人困惑。你不是从面板传播到网格,而是从网格传播到面板。你是对的。事实上我想在我的TPanel中有一个事件,它将在DBGrid.OnCellClick事件被raize之后调用。要执行我放入TPanel.OncellClick事件中的代码。