我动态生成的控件,在运行时报错‘invalid class typecast’(200分)

  • 主题发起人 主题发起人 chen66
  • 开始时间 开始时间
C

chen66

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中我定义了些动态控件,编译时没有问题,但在运行时如dbmemo不能输
入每次输入时报错‘invalid class typecast’其他非数据控件也一样
1、我不知道这个错误是如何产生的
 
具体一些
 
你应该把相关的代码都贴出来
 
是不是类型不匹配,
能否看以下你的代码
 
请先将相关源码贴上。
 
bcomp:array of tlabel;

setlength(bcomp,count);
for i:=0 to count-1 do
begin
bcomp:=tlabel.create(self);
with bcompdo
begin
parent:=form1;
left:=80;
width:=50;
height:=20;
top:=70+25*i;
bcomp.OnMouseUp:=myMouseUp;
end;
end;
 
你的代码没有问题,但这段代码与你的 dbmemo 有什么关系吗?
 
没问题。
 
>把相关的代码都贴出来
继续
 
我是同时动态生产几组控件,label和dbmemo 都出现该问题,我只写了label的部分
我想如该控件的问题解决了,其他应等同视之
谢谢你!
 
>>label和dbmemo 都出现该问题

Label也有输入问题? 有意思啊.
 
>>把相关的代码都贴出来
>继续
继续

 
啊!label有事件,当点激该控件希望激发其事件时是这个问题。
dbmemo输入时有这个问题
代码太多,我认为相关的都在这里了,不知你要那部分的?
 
我现在觉得也许是事件的类型不对
procedure tform1.mymouseup(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

begin

if button=mbleft then

begin

if ssctrl in shift then
begin
acomp[(sender as tdbmemo).tag].width:=acomp[(sender as tdbmemo).tag].Width +x;
acomp[(sender as tdbmemo).tag].height:=acomp[(sender as tdbmemo).tag].height +x;
bcomp[(sender as tlabel).tag].Width :=bcomp[(sender as tlabel).tag].Width +x;
bcomp[(sender as tlabel).tag].Height :=bcomp[(sender as tlabel).tag].Height +y;
if bcomp[(sender as tlabel).tag].width < 8 then
bcomp[(sender as tlabel).tag].width:=8;
if bcomp[(sender as tlabel).tag].Height <8 then
bcomp[(sender as tlabel).tag].height:=8;
if acomp[(sender as tdbmemo).tag].width < 8 then
acomp[(sender as tdbmemo).tag].width:=8;
if acomp[(sender as tdbmemo).tag].Height <8 then
acomp[(sender as tdbmemo).tag].height:=8;
end

else if ssshift in shift then
begin
comlist.add(sender);
end

else if ssalt in shift then
begin
bcomp[(sender as tlabel).tag].left:=bcomp[(sender as tlabel).tag].Left +x;
bcomp[(sender as tlabel).tag].top:=bcomp[(sender as tlabel).tag].Top +y;
acomp[(sender as tdbmemo).tag].left:=acomp[(sender as tdbmemo).tag].Left +x;
acomp[(sender as tdbmemo).tag].top:=acomp[(sender as tdbmemo).tag].Top +y;
end;


end ;
end;
在次声明,我第一次粘的代码是简写,在程序中我给tag付了值
 
acomponent[(sender as tdbmemo).tag].width:=acomponent[(sender as tdbmemo).tag].Width +x;
有问题!!!?
谁能告诉应该如何写?
 
acomponent[(sender as TComponent).tag].width:=acomponent[(sender as TComponent).tag].Width +x;

否则要作如下的判断:
if Sender is TDBMemo then ...
if Sender is TLabel then ...
 
Sorry!

acomponent[(sender as TControl).tag].width:=acomponent[(sender as TControl).tag].Width +x;
 
谢谢big_z,你的方法可行,你告诉我你是如何知道的,我马上给你分。
 
>你是如何知道的
???
这个比前面的问题可难回答多了!^_^!
时间长了就会了!

同时对于几种类进行操作公共属性的话,
最好是对他们的祖先(且具有共同属性)进行类型转换。
 
授人以鱼不如授人以渔
谢谢大家
 
后退
顶部