我有两个动态创建的组件,一个按钮(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);
如果有人可以帮助我,我真的很感激。感谢
答案 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.