问题大致是这样,一窗体内某控件动态生成,当由一click触发一事件:如下(首先判断是否存在此控件,如果存在删除)
  countnum:= ParentControl.ControlCount;
  if countnum>0 then
  begin
      try
        for i:=0 to countnum-1 do
        begin
        if ParentControl.Controls[i].ClassType=TRzMemo then
        begin
            ParentControl.Controls[i].Free;
            Break;
        end;
       end;
      except
      end;
  end;会出现闪屏现象,如何解决呢?

解决方案 »

  1.   

    在for循环中加入Application.ProcessMessages;试试。
      

  2.   

    是在form上呢,还是在什么容器里?
      

  3.   

    Self.DoubleBuffered := True;   //减少闪动
    加上这句试一下
      

  4.   

    回复#2楼,窗体上所有控件都在panel上呢。
      

  5.   

    你那删除控件的方法就有问题 如果创建2个以上 的控件时  在销毁时 肯定报错
    不信 你动态创建2个控件看看 
    自己以前写的方法procedure TfrmSqlManager.FreeSqlObject(Count:Integer;AParent:TComponent);
    var
      i,k: integer;
      Asp,ADa,ADs,ADb: string;
    begin
      if (Count < 1) or (Count > 50) then Exit;
      for i := 1 to Count do
      begin
        ADa := 'AData'+inttostr(i);
        ADs := 'ADSource'+inttostr(i);
        if Self.FindComponent(ADa) <> nil then Self.FindComponent(ADa).Free;
        if Self.FindComponent(ADs) <> nil then Self.FindComponent(ADs).Free;
      end;
      for k := 1 to Count do
      begin
        Asp := 'ASplitter'+inttostr(k);
        ADb := 'ADBGrid'+inttostr(k);
        if AParent.FindComponent(Asp) <> nil then AParent.FindComponent(Asp).Free;
        if AParent.FindComponent(ADb) <> nil then AParent.FindComponent(ADb).Free;
      end;
    end;
      

  6.   

    Count 动态生成 控件的个数  AParent 容器
      

  7.   

    Dateset DateSource 容易 好像是 TForm
      

  8.   


        for   i:=0   to  ParentControl.ControlCount -1 do 
        begin 
          if   ParentControl.Controls[i] is TRzMemo   then 
          begin 
            TRzMemo(ParentControl.Controls[i]).Free; //全部释放了。
            //Break;  
          end;        
        end;
    我改了下, 我的想法是根本就没有判断。感觉你的程度不是释放某一个TRzMemo,好像全部TRzMemo这个类型的(或许总共才一个TRzMemo)。 
      

  9.   

       countnum:=   ParentControl.ControlCount; 
        if   countnum> 0   then 
        begin 
                try 
                    for   i:=0   to   countnum-1   do 
                    begin 
                    if   ParentControl.Controls[i].ClassType=TRzMemo   then 
                    begin 
                            ParentControl.Controls[i].Free; 
                            Break; 
                    end;
                  end; 
                   self.update;//加上这句看看  在看看From.omPain事件有写什么代码没
                except 
                end; 
      

  10.   

    Self.DoubleBuffered := True;   //减少闪动
      

  11.   

    可以先锁住屏幕
    然后创建
     再self.DoubleBuffered := True;
     //
        Perform(WM_SETREDRAW, 1, 0); //解锁屏幕并重画
       RedrawWindow(AForm.Handle, Nil, 0, RDW_FRAME + RDW_INVALIDATE +
        RDW_ALLCHILDREN + RDW_NOINTERNALPAINT);
    最后来判断并且处理
    绝对没有问题