比如整个界面frmAA的Keypress控制录入edit框(edtCon)内容必须为数字.此函数已经控制好IsNum
procedure TfrmAAA.FormKeyPress(Sender: TObject; var Key: Char);
begin
方法一:
if (Not isNum(Key)) and (Sender as Tedit).name=edtCon.name then
key:=#13;
方法二:
if (Not isNum(Key)) and Tedit(Sender).name=edtCon.name then
key:=#13;
方法三:if (Not isNum(Key)) and activecontrol.name=edtCon.name then
key:=#13;
end;
结果:
方法一直接报错
方法二获取到Tedit(Sender).name的值为frmAA,即理解为KeyPress事件所在的控件,不合适
方法三正确,这里我们利用了窗体的ActiveControl属性,它代表当前获得焦点的输入文本框
另外,ComponentIndex属性代表了窗体控件放置的次序
///
Sender举个例子
有两个button,共用一个onclick过程,当用户按下某个button时,sender就是用户按下的那个button,或者,这个过程并不是一个可触发事件的过程,只是一般过程,那么在其它地方调用这个过程的时候必需指定sender的名称,在这个过程里就可以引用这个名称了,sender一般为tobject,如果你知道这个sender应该是什么类的,在引用时加个强制类转换就行了,比如前面的button,你可以引用为tbutton(sender),这里你再按小数点就能提示出tbutton应该有的东西了
/
建立窗体是经常要用到他们如:
form1:=tform
.
create(application);
form1:=tform
.
create(self);
form1:=tform
.
create(
nil
);
form1:=tform
.
create(application); 当应用程序关闭时form1会被释放
form1:=tform
.
create(self); 当前窗体释放时form1会被释放
form1:=tform
.
create(
nil
); 需要自己动手释放,没人会为你代劳
Form1 := TForm
.
Create(Arg);
其中的Arg代表的是Form的Owner,也就是拥有者。
什么叫拥有者呢,意思就是说当这个拥有者释放的时候,Form1也会释放。
{************************************************************************************************************************}
在事件处理程序参数表中,至少含有一个参数Sender,它代表触发事件处理程序的构件,如在上例中,Sender就指Button2,有了Sender参数,可以使多个构件共用相同的事件处理程序,如下例:
Procedure
Tform1
.
Buttonclick(Sender:Tobject);