问题的描述就是:
类AA的对象:(A和B)在类X的某个方法中执行A.GetSource和B.GetSource没有任何问题!但是如果在类X的爸爸XX类中执行A.GetSource没有问题,执行B.GetSource就出问题.(问题是:返回一个nil值,没问题的时候返回的是一个Tdataset类对象,从单步执行中看到的)
类AA的对象:(A和B)在类X的某个方法中执行A.GetSource和B.GetSource没有任何问题!但是如果在类X的爸爸XX类中执行A.GetSource没有问题,执行B.GetSource就出问题.(问题是:返回一个nil值,没问题的时候返回的是一个Tdataset类对象,从单步执行中看到的)
type
TChooseSV = class(TItemChooseControl)例如X类的执行这个过程是这样的:
procedure TChooseSV.E_RomExit(Sender: TObject);
begin
Tcustomedit(sender).Text:=trim(Tcustomedit(sender).Text);
if length(Tcustomedit(sender).Text)=0 then
exit;
if (Rom_state<>nil) then //房间状态显示的时候
Tcustomedit(sender).Text:=Rom_state.GetDarkCaption(Tcustomedit(sender).Text,'R_Name');
end;
这样执行是没有问题的!如果把这部分代码放在它的父类AA
procedure TItemChooseControl.E_RomExit(Sender: TObject);
begin
inherited;
Tcustomedit(sender).Text:=trim(Tcustomedit(sender).Text);
if length(Tcustomedit(sender).Text)=0 then
exit;
if (Rom_state<>nil) then //房间状态显示的时候
begin
Tcustomedit(sender).Text:=Rom_state.GetDarkCaption(Tcustomedit(sender).Text,'R_Name');
end;
程序运行是错误的!但是我的另外一个过程:
procedure TItemChooseControl.E_KeyNameExit(Sender: TObject);
begin
inherited;
Tcustomedit(sender).Text:=trim(Tcustomedit(sender).Text);
if length(Tcustomedit(sender).Text)=0 then
exit;
if (Key_State<>nil) then //匙牌状态显示的时候
begin
Tcustomedit(sender).Text:=Key_State.GetDarkCaption(Tcustomedit(sender).Text,'K_No');
end;
end;
这个无论怎么放都没问题!大家应该就怀疑Key_State和Rom_state这两个对象的问题了!
好了!不用看了!原来我的创建它的模块没有uses那个子类的模块进去!我晕!
好了!我知道没问题了!但是我还是觉得不妥!继承的类能执行而放在爸爸里面就不能执行!那我可真服了!
后来我发现创建它的那个模块没有uses那个单元!在定义的时候!直接
Var ChooseSV :TChooseSV
后来我把这个删除后,系统检测到使用了那个单元!然后就提示添加了!之后就没有出现过那种情况!
这个问题搞了我一天时间了!搞不明白的就是为什么继承类可以获取到那个变量!到了父类的时候就获取不到了!