【问题标题】:Assign event listener to dynamically created TPanel in Delphi在 Delphi 中将事件侦听器分配给动态创建的 TPanel
【发布时间】:2019-09-08 03:23:15
【问题描述】:

我像这样创建了一个TPanel 组件:

procedure TVistaVehiculo.CrearMenu(Name: string);
var
  Panel : TPanel;
begin
  Panel := TPanel.Create(VistaVehiculo);
  Panel.Parent := VistaVehiculo.Sidebar;
  Panel.Width := VistaVehiculo.Sidebar.Width;
  Panel.Height := 40;
  Panel.Caption := Name;
  Panel.BevelInner := TBevelCut.bvNone;
  Panel.BevelOuter := TBevelCut.bvNone;
  Panel.BevelKind := TBevelKind.bkNone;
end;

现在,我想在这个面板上附加一个事件监听器并将对象作为参数传递。

然后我创建一个这样的过程:

procedure TVistaVehiculo.ClickOnMenu(Sender: TPanel);
begin
    Sender.Caption := 'Clicked'; //for example
end;

我该怎么做?

对不起,如果这个问题很愚蠢 - 我对 Delphi 很陌生

【问题讨论】:

  • Panel.OnClick := Self.ClickOnMenu; 注意SelfTVistaVehiculo 的实际实例。使用VistaVehiculo 不是引用表单实例的方式。避免这种情况。
  • 需要注意的是,他需要将他的 ClickOnMenu 声明更改为 ClickOnMenu(Sender : TObject),因为 OnClick 是一个 TNotificationEvent。
  • @KenBourassa,很好,错过了。
  • 相关但不一定重复:stackoverflow.com/questions/28265513/…

标签: delphi


【解决方案1】:
procedure TVistaVehiculo.CrearMenu(Name: string);
var
  Panel : TPanel;
begin
  Panel := TPanel.Create(VistaVehiculo);
  Panel.Parent := VistaVehiculo.Sidebar;
  Panel.Width := VistaVehiculo.Sidebar.Width;
  Panel.Height := 40;
  Panel.Caption := Name;
  Panel.BevelInner := TBevelCut.bvNone;
  Panel.BevelOuter := TBevelCut.bvNone;
  Panel.BevelKind := TBevelKind.bkNone;
  Panel.OnClick := ClickOnMenu; // <-- add this!
end;

procedure TVistaVehiculo.ClickOnMenu(Sender: TObject); // <-- must be TObject!
begin
  TPanel(Sender).Caption := 'Clicked';
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 2011-01-28
    • 2015-10-31
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多