有没有一种方法可以从动态对象(如ID)发送数据?

时间:2019-07-18 14:33:19

标签: delphi pascal

因此,我必须创建一个类似于Instagram或9Gag的软件,如果按下了Upvote按钮,我想使用Post_ID和User_ID将其添加到数据库中的Upvote表中。由于动态创建的面板是按钮的父级,因此我想使用该数据,但是OnClick事件只能接受1个参数。谁能帮忙。

要纠正自己,我使用的是图像而不是按钮,通常我会使用按钮的标题来存储数据,但不能使用TImage。


procedure dynImgUpvoteClick(Sender: TObject);
begin
showmessage('Clicked');
end;

dynImgUpvote.OnClick := dynImgUpvoteClick;

我想编写它,以便在单击按钮时可以发送Post_ID和User_ID以与SQL一起使用,以添加到数据库中。但是,我不能使用多个参数。

1 个答案:

答案 0 :(得分:0)

我有以下建议:

  1. 使用Tag属性是一种错误形式,一般不建议使用。

  2. 您可以创建包含所需属性的后代类: 例如:

type TMyImage = class(TImage)
      strict private
        FStrParam: string;
        FIntParam: Integer;
      public
        property StrParam: string read FStrParam write FStrParam;
        property IntParam: string read FIntParam write FIntParam;
      end;

然后,您将动态设置具有所有必要属性的图像:

procedure TForm1.Button1Click(Sender: TObject);
var
  Img: TMyImage;
begin
  Img := TMyImage.Create(Self);
  {Set other properties: size, positipn etc.}
  Img.StrParam := 'Some string';
  Img.IntParam := 123;
  Img.OnClick := dynImgUpvoteClick;
end;

并处理您的OnClick处理程序类型中的所有属性:

procedure dynImgUpvoteClick(Sender: TObject);
begin
  showmessage('Clicked ' + (Sender as TMyImage).StrParam +
    IntToStr((Sender as TMyImage).IntParam));
end;