变量定义的问题,请高手帮忙(50分)

K

kmyan

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了一个全局变量,类型为tobject(ctrlgrid:tobject=nil)
在两个模块中调用
第一个模块希望ctrlgrid的类型为dbgrid
第一个模块希望ctrlgrid的类型为dbgrideh
就是在程序中动态控制ctrlgrid的变量类型,谢谢!
 
不同的继承体
 
是的,请问如何做?
 
if ctrlgrid is TDBGrid then
begin
TDBGrid(ctrlgrid)
.....
end
else if ctrlgrid is TDBGridEh then
begin
TDBGridEh(ctrlgrid)
.....
end
 
没弄明白你是要做什么
不过 if (ctrlgrid is dbgrid) then //dbgrid
else if (ctrlgrid is dbgrideh) then //dbgrideh
 
各位没明白我的意思
我是说
把公共变量定义成我想要的内容,即如何在各个小模块中重新定义我想要的类型
 
你可以这样使用

(ctrlgrid as tdbgrid).
or
(ctrlgrid as tdbgrideh).

 

通过不同的类Create
 
声明为 TObject 不存在问题!!!看以下的过程:

procedure TForm1.Button1Click(Sender: TObject);
var
obj:TObject;
begin
obj:=TEDit.Create(self);
showmessage(obj.classname);
obj:=TButton.Create(self);
showmessage(obj.classname);
end;
 
影子:
麻烦你具体要怎么写?
 
TO JSXJD:
如果我这样写为什么不对,该如何改正?
procedure TForm1.Button1Click(Sender: TObject);
var
obj:TEDIT;
begin
obj:=TEDit.Create(self);
showmessage(obj.classname);
obj:=TButton.Create(self);
showmessage(obj.classname);
end;
 
to jsxjd:
因为我先前用到了DBGRID的属性,所以定义成Tobject 会出错,如果我先定义成tdbgrid,然后
在把他释放,在定义成别的变量(tdbgrideh),行不行?
 
jsxjd给你写了。
上面的TEdit不是TButton的基类,所以出错。
tobject是所有类的基类,可行的。
 
谢谢,我晓得了……
当我如果就要实现这种情况,就没有别的办法了吗?
 
完全可行:
var
aobj:TObject;
..
aobj := tdbgrid.create(self);//现在aobj指向了一个Tdbgrid类型的对象.
...
aobj := tdbgrideh.create(self);//现在aobj指向了一个Tdbgrideh类型的对象.
 
能不能有个初始定义?
 
变量声明为公共基类!!
 
to jsxjd:
首先谢谢你
因为tdbgrid和tdbgrideh基类是不相同的,到grid层
所以我就想先把它定义成object,然后再给它定义初始值
var
obj:tobject:=tdbgrid.create(self);
这样要怎么写?
 

不要初始定义。
 
必须要初始定义……
因为我在别的模块中用到了它的属性和方法,不这样的话,要出错……
其实挺烦的,为什么tdbgrid和tdbgirdeh的基类不一样,意思是到grid层
要不,就简单多了,再次麻烦富翁们想想办法!
 
顶部