我编写了一个程序,采用的是父子窗体。子窗体的作用是数据输入,有多个edit控件和一个保存按钮,另外还在子窗体FormKeyDown中定义了功能键F10,按F10就触发保存按钮,保存完后我把焦点放到第一个edit控件。
问题:
    当我输入完后,如果用鼠标单击保存按钮,程序正常运行,焦点移到第一个edit控件。如果用F10保存,后焦点虽然移到第一个edit控件,然后在键盘输入一个字符,edit控件里不会有这个字符,当输入第二个字符才会出现。也就是说F10保存后,焦点转移正常,但不能马上输入数据,至少要按一下键盘或者鼠标点击一下窗体后才能输入

解决方案 »

  1.   

    f10里怎么写的?
    svaedatda;
    editx.setfocus;//这样吗?
      

  2.   

    to nyf1220
    是这样的我的保存数据的代码在button下,保存数据代码的最后是editx.setfocus;//;在子窗体FormKeyDown过程中定义
    if key=VK_F10 then
      cxButton1.Click;
      

  3.   

    to whythinkwhy
    F10保存后,在输入前,焦点不会闪烁,一定要单击一下窗体或键盘单击一下,光标才闪烁.
      

  4.   

    是不是这样的原因:
    因为点击BUTTON后,子窗体的焦点还在本身。F10的时候,虽然执行代码,焦点是否转移到父窗体?
    能否先测试一下窗体的焦点转移?
    svaedatda;
    parentform.show;  //加入一个子窗体获得焦点?(如果焦点有转换后的话,加这句,如果无的话, 
                        我也不知道怎么处理了。)
    editx.setfocus;   //这样吗?
      

  5.   

    to : qingfengsishi(又回到delphi) 
    不好意思。你的意思是不是
    savedata;//保存数据
    parentform.show;  //parentform是父窗体show,还是子窗体show???
    editx.setfocus;   
    用上述方法,即父子窗体show我都尝试过,结果还是一样的。
    不过还是谢谢你了。
      

  6.   

    你可以在afterpost事件中写入editx.setfocus 试试
      

  7.   

    to:nyf1220
    先setfocus后保存不行的。
    我在setfocus后加了
    Application.MessageBox('保存成功!','提示',MB_ICONINFORMATION)
    提示窗口关闭后就可以正常输入了。
      

  8.   

    to:whythinkwhy(小生) 
    在afterpost事件中写入editx.setfocus不行的,我用的是ADOQUERY,执行存储过程,而且这个ADOQUERY是很多子窗体共用的。
      

  9.   

    是不是机的反映慢,是关于硬件的吧,
    要不你试试edit1.setfocus
      

  10.   

    to  redmoon_line(真的不知道) 
    不是机子反应慢,等多长时间都没有用的。