MDI子窗体是在设计时已存在,只是在程序开始时不自动生成,而是点击“新建”菜单动态生成的,我想在这个动态生成的子窗体中响应onKeyup事件,动态生成子窗体后,默认焦点是这个窗体,可以响应OnKeyup事件,但当我在主窗体上操作一些控件后,在回到子窗体就无法响应该事件了,不知是何原因?怎么处理?谢谢!

解决方案 »

  1.   

    form1,主窗体,form2子窗体,
    application.run时,form1.create,form2不create,
    点击form1.newform菜单按钮,生成动态窗体数组.
    formarray[i]:=Tform2.create;
    formarray[i].name:='mdiform'+inttostr(i);
    此时,formarray[i]显示,可以响应form2.onkeyup事件
    但当我在form1上的编辑控件上操作一次后,
    再返回到formarray[i],就响应不了form2.onkeyup事件但我把formarray[i]先最小化,再最大化后,又可以响应form2.onkeyup事件。
    我想是formarray[i]没真正得到焦点。请问高人如何处理。
      

  2.   

    明白了,或许你可以在form1的onActivate事件里把form2.onkeyup赋值给form1.onkeyup
      

  3.   

    在form1的onactivate里写
    if assigned(formarray[i]) then
      form1.onkeyup(sender) := formarray[i].onkeyup(sender);
      

  4.   

    在form1的onactivate里写
    if assigned(formarray[i]) then
      form1.onkeyup(sender) := formarray[i].onkeyup(sender);
      

  5.   

    Form2.OnActive的时候:
    Form2.OnKeyUp := Form2KeyUp;
      

  6.   

    form1.onkeyup(sender) := formarray[i].onkeyup(sender)
    不行,参数都不够
    form2.onActive根本不执行
    我发现只有form2中有edit或memo这类能得到输入焦点的控件时,才能真正激活form2,才能触发form2.onactive事件件,我做的是绘图程序,子窗体里只有image,panel控件,所以不能触发form2.onactive,
    正在想解决办法,各位可以帮我想想,谢谢了
      

  7.   

    谢谢Corn1,你的方法可行,不过要改一下:
    在创建子窗体时赋值:
    form2.onkeyup:=form1.onkeyup;谢谢了,结题