带有事件处理程序的动态对象 - Delphi

时间:2015-06-30 19:04:11

标签: delphi dynamic delphi-2010 procedures

我有两个动态创建的组件,一个按钮(btnEnter)和一个编辑(edtID) - 用户将在其中输入用户ID。我想要的是程序在点击按钮时验证用户是否输入了有效的ID。

我的代码:

1)创建对象时

    with btnEnter do
    {edit properties such as caption, etc}
    OnClick := ValidateID;

2)程序声明如下:

    procedure ValidateID (Sender : TObject);

我想要做的是将编辑中的文本作为参数传递给程序,以便程序能够操作文本并确定它是否有效。

所以我尝试过,但没有工作的是:

    procedure ValidateID (Sender : TObject; sID : string);

    with btnEnter do
    OnClick := ValidateID(edtID.Text);

如果有人可以帮助我,我真的很感激。感谢

2 个答案:

答案 0 :(得分:2)

TButton.OnClick事件的类型为TNotifyEvent,其中包含签名:

  TNotifyEvent = procedure(Sender: TObject) of object;

因此,您无法将具有不同签名的过程分配给TButton.OnClick

您需要将ValidateID过程声明为表单类的方法然后,因为TEdit在同一个表单上,它与验证方法在同一范围内,您只需访问EditID 。ValidateID方法中的文字。

答案 1 :(得分:1)

此代码有效。

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    button: TButton;
    edit: TEdit;
    procedure ValidateID(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
  edit := TEdit.Create(self);
  button := TButton.Create(self);
  button.Parent := Form1;
  edit.Parent := Form1;
  edit.Left := 1;
  edit.Top := 1;
  button.Left := 1;
  button.Top := 50;
  button.OnClick := ValidateID;
end;

procedure TForm1.ValidateID(Sender: TObject);
begin
  ShowMessage(edit.Text)
end;

end.