onshow事件应该可以,你的问题可能不是因为访问子窗体引起的!如果可以发一段处理过程的代码来看看!

解决方案 »

  1.   

    您也可以这样:
    form1:=tform.create(application);
    {
    //procedure...//这里为你要做的处理过程
    }
    form1.showmodal;
      

  2.   

    你说的主窗体和子窗体是不是MDI格式的?如果是,主窗体的于子窗体的创建顺序应该是:
    主窗体create->子窗体create->子窗体show->主窗体show你检查一下程序传递的文件顺序是否正确!
      

  3.   

    讲的再仔细点:如果一个窗体已经创建了,即它的create事件已经执行过,就可以访问它本身了!所以你完全可以在子窗体的onshow事件中访问本身的资源!
      

  4.   

    你要在主窗体的 OnShow 事件中生成显示子窗体,
    然后在子窗体的 OnShow 事件中处理。
      

  5.   

    主窗体弹出子窗体用动态创建,在子窗体的代码里写一个函数来创建子窗体。比如,
    function LoadEditMap(ShowOrEdit: Boolean; BitMapStr: String): String;
    begin
        fmEditBitMap := TfmEditBitMap.Create(nil);
        Result := '';
        with fmEditBitMap do
        begin
            if ShowOrEdit then
                Caption := '编辑BitMap'
            else
                Caption := '显示BitMap';        BitMapToStr(BitMapStr);//这个过程就是处理BitMapStr并将结果显示于窗体的控件里
            if (ShowModal = mrOk) and ShowOrEdit then
                Result := StrToBitMap(StrBitMap);
            free;
        end;
    end;
      

  6.   

        是我提的问题。
        我所说的主窗体和子窗体不是MDI形式,是主界面和附属界面的意思,且都是Modeless窗体。而且我也确实试过在附属窗体的OnShow()过程中加入处理过程,但确实会引发异常——因为调试时发现附属窗体本身的值还是nil(就是没创建完),这时去访问该窗体本身肯定不行。
        可是如果我等附属窗体创建完后,再去触发处理操作,就是正常的。第一次不能全部做完所有处理,> 1 次就可以了。
        确实很苦恼。
      

  7.   

        是我提的问题。
        附属窗体名为form2,要访问form2的属性:form2.Hint:=…… ,form2.WindowState:=...
    等,这些 操作将引发异常。
      

  8.   

    不可能是没创建完窗体的事,oncreate事件结束后,一个窗体就创建完了!
      

  9.   

    这样吧!我的OICQ号是:33291349。有什么需要和我联系!
      

  10.   

    是我提的问题。
    大伙儿说的真是各有奇招,的确用OnPaint()中的过程就可以避免异常。但是这样一来,我改变一下子窗体的大小就会触发又一次的相同处理操作,而这是没有必要的。
    我希望激活该子窗体后,自动处理完成,不管怎么动它应该不要再去重复处理。
      

  11.   

     在 Form2.OnShow 中处理 form2.Hint:=…… ,form2.WindowState:=... 这些事情是不产生异常的。
    你的 Form2 是怎么创建的?什么时候创建的?
      

  12.   

    下面这段代码编译通过。
    procedure TForm1.FormShow(Sender: TObject);
    begin
     form2:=TForm2.Create(Application);
     form2.show;
    end;procedure TForm2.FormShow(Sender: TObject);
    begin
     form2.Hint :='fsdafds';
     showmessage(hint);
     form2.WindowState:=wsMaximized;
    end;
      

  13.   

    是我提的问题。
    Form2附属窗体是动态创建的,不知道为什么我的程序中在 OnShow()中Form2的值就是NIL(调试发现),而且此时Form2的窗体界面还没有显现(直到处理结束才出现)。