assigned() 函数到底是测试的是窗体的什么值,窗体(fr_money_in)到底是个什么值???欢迎大家讨论。!!!!!procedure Tfr_main.money_outExecute(Sender: TObject);
var
  fr_money_in:Tfr_money_out;
begin
    if not assigned(fr_money_in) then //为什么再次出错
       fr_money_out:=Tfr_money_out.create(application)
    else
       fr_money_out.show;
end;
出错信息如下:
---------------------------
p_cshgl
---------------------------
Access violation at address 0046403A in module 'p_cshgl.exe'. Read of address 000002EC.
---------------------------
确定   
---------------------------

解决方案 »

  1.   

    I think that assigned should be this
    function Assigned(p: Pointer) : boolean;
    begin
      Result := p <> nil;
    end;
      

  2.   

    按照你上面的代码,应该是一定要出错的。因为局部变量定义后,其内容是不定的,如果不是nil,那么就会调用
    fr_money_out.show;而fr_money_out未必就初始化了。
    下面的代码保证你不会出错。(猜测fr_money_out是全局变量,在Unit中定义了)
    procedure Tfr_main.money_outExecute(Sender: TObject);
    begin
        if not assigned(fr_money_out) then 
           fr_money_out:=Tfr_money_out.create(application)
        else
           fr_money_out.show;
    end;
      

  3.   

    assigned是用来测试参数的指针是否为nil