第一段
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage( (Sender as TButton).Name );
//Sender: TObject 表示 Sender 是 TObject型态
// TObject 无 Name 属性
//ShowMessage( Sender.Name ); // error
end;
第二段
procedure TForm1.Timer1Timer(Sender: TObject);
var
X:Integer;
begin
X:=Form1.ActiveControl.ComponentIndex;
(Form1.Components[X] as TEdit).Color := clFuchsia;
Label1.Caption:='共有 '+IntToStr(Form1.ComponentCount)+' 个组件';
Label2.Caption := (Form1.ActiveControl as TObject).Name +
' is '+ (Form1.ActiveControl as TObject).ClassName;
end;
第一段要转成TButton而使用name属性,第二段却转成TOjectect使用name,不解
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage( (Sender as TButton).Name );
//Sender: TObject 表示 Sender 是 TObject型态
// TObject 无 Name 属性
//ShowMessage( Sender.Name ); // error
end;
第二段
procedure TForm1.Timer1Timer(Sender: TObject);
var
X:Integer;
begin
X:=Form1.ActiveControl.ComponentIndex;
(Form1.Components[X] as TEdit).Color := clFuchsia;
Label1.Caption:='共有 '+IntToStr(Form1.ComponentCount)+' 个组件';
Label2.Caption := (Form1.ActiveControl as TObject).Name +
' is '+ (Form1.ActiveControl as TObject).ClassName;
end;
第一段要转成TButton而使用name属性,第二段却转成TOjectect使用name,不解
--
这个写法感觉有问题,TObject根本就没有Name这个属性嘛?这个直接写Form1.ActiveControl.Name就好了,ActiveControl本来就有这个属性不用做转换了,
ShowMessage((Sender as TButton).Name);
ShowMessage((Sender as TComponent).Name);
ShowMessage(TComponent(Sender).Name);
ShowMessage(TControl(Sender).Name);
ShowMessage(TWinControl(Sender).Name);
第二个,如果你写成TObject(Form1.ActiveControl).Name这样编译的时候就会报错的,但是比较奇怪的是AS居然不会报错,难道用AS编译器发现不匹配会自己纠正,这是什么什么书上写的啊,怎么会那样写啊