project protject1.exe raised exception class
EInvalidopration with message 'cannot focus a disabled or invisible window'.process stopped.use step or run to continue.这是我的一段代码:
Function XJ_DLDFFhgc(CQH,NY:String):TModalResult;
begin
  With TFrmXJ_DLDFFH.Create(AppLication) do
  begin
    try
      pCQH := CQH;
      pNY := NY;
      Caption := '限价_电量电费查询';
      With Query1 do
      begin
        DisableControls;
        Close;
        SQL.Clear;
        SQl.Add('SELECT * FROM DBO.XJ_DFFHB');
        SQL.Add('WHERE XJCQH ='''+' '+'''');
        SQL.Add('ORDER BY CBXH');
        Open;
      end;
      Query1.EnableControls;
      combobox1.ItemIndex :=0;
      edit2.Text :=formatdatetime('yyyy"/"mm',date);
      Result :=ShowModal;
      Screen.Cursor:=CrArrow;
      edit1.SetFocus;
    finally
      Free;
    end;
  end;
end;

解决方案 »

  1.   

    错误信息已经说得很清楚了,disabled 或 invisible的窗体是不能获得焦点的,
    你的 edit1.SetFocus; 放在ShowModal之后,这里窗体已经关闭了, 
    把edit1.SetFocus;放在 TFrmXJ_DLDFFH 的 OnShow 事件中。
      

  2.   

    edit1.SetFocus;写在窗体的OnShow事件中
    在关闭的窗口中不能SetFocus
      

  3.   

    我以为 ShowModal就是显示 ,怎么会已经关闭了呢???《我一直都是这么以为的》不是Free;以后才是关闭吗??
      

  4.   

    Free是释放。
    因为是模态(ShowModal)窗体,显示后程序等待用户关闭窗体后才继续执行后面的代码。
      

  5.   

    try
     edit1.setfocus;
    except
    end;就这样搞定
      

  6.   

    就是啊,我是showmodel了,就是带摸显示窗体,这个时候窗体是存在的,我用setfocus应该就是可以的了,为什么要到onshow中做呢,
    我到onshow中试,发现成功了!但是我 想搞清楚为什么这样,
    如果是在showmodel后面的语句都是在窗体关闭后才执行,那么
          Screen.Cursor:=CrArrow;
          edit1.SetFocus;
        finally
          Free;
    是不是都是在窗体关闭后才做呢,我一直以为是
        finally
          Free;  
    在关闭窗体的时候做呢!看来我又错了!
      

  7.   

    建议:写在窗体的OnShow事件中
      

  8.   

    同意,写在form的onshow 事件中