按经验,这样写是不行的,如 function var(Sender: TObject) : TObject ;//TWincontrol TObject.className 本身并不知道 begin if Sender.ClassName = 'TEdit' then Result := TEdit(Sender) else if Sender.ClassName = 'TButton' then Result := Tbutton(Sender) ........ 传进去是TObject出来还是TObject没有意义,应该没有什么办法来代替end; 如果你调用的时候用 Var(Sender).Property,这样在编译时是通不过的
procedure TForm1.Button1Click(Sender: TObject); var vComponentClass: TComponentClass; begin vComponentClass := TForm; with TForm(vComponentClass.Create(Self)) do try ShowModal; finally Free; end; end;
procedure TForm1.Button1Click(Sender: TObject);
var x:^Tbutton;
begin
new(x);
x^:=button1;
form1.caption:=x^.Caption;
end;
你每次用val()
都要给 val赋值为什么不直接用TComboBox(Sender)呢?不知道有没有一个函数可以在知道了类名的情况下把某个变量转变成该种类
(Sender as TEdit).color:=clsilver;if sender.classname='TComboBox' then
(sender as TComboBox).color:=clsilver;
我的意思是Val是一个变量,是一个存放了诸多种wincontrol类名的变量
如它可能的值:TEdit,TButton...
然后在不需要if Sender.classname='TEdit' then的情况下
将sender TEdit化
如tramplyc所说
"不知道有没有一个函数可以在知道了类名的情况下把某个变量转变成该种类"
类似于变量的变量
function var(Sender: TObject) : TObject ;//TWincontrol
TObject.className 本身并不知道
begin
if Sender.ClassName = 'TEdit' then
Result := TEdit(Sender)
else if Sender.ClassName = 'TButton' then
Result := Tbutton(Sender)
........
传进去是TObject出来还是TObject没有意义,应该没有什么办法来代替end;
如果你调用的时候用
Var(Sender).Property,这样在编译时是通不过的
var
vComponentClass: TComponentClass;
begin
vComponentClass := TForm; with TForm(vComponentClass.Create(Self)) do try
ShowModal;
finally
Free;
end;
end;
你的val是字符型,不可以强制转化成类的!!!