问题的描述就是:
类AA的对象:(A和B)在类X的某个方法中执行A.GetSource和B.GetSource没有任何问题!但是如果在类X的爸爸XX类中执行A.GetSource没有问题,执行B.GetSource就出问题.(问题是:返回一个nil值,没问题的时候返回的是一个Tdataset类对象,从单步执行中看到的)

解决方案 »

  1.   

    定义是这样的:
    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那个子类的模块进去!我晕!
    好了!我知道没问题了!但是我还是觉得不妥!继承的类能执行而放在爸爸里面就不能执行!那我可真服了!
      

  2.   

    你的constructor和destructor过程是怎么写的?
      

  3.   

    我没有这两个过程!这两个是创建和销毁的过程?我的都是继承的类!
    后来我发现创建它的那个模块没有uses那个单元!在定义的时候!直接
    Var ChooseSV :TChooseSV
    后来我把这个删除后,系统检测到使用了那个单元!然后就提示添加了!之后就没有出现过那种情况!
    这个问题搞了我一天时间了!搞不明白的就是为什么继承类可以获取到那个变量!到了父类的时候就获取不到了!