我有23个dbedit组件。我想把这23个DBEDIT的enabled同时用手工设置成false;如果用DBEDIT1.ENABELD:=FALSE;实现就要写23句,请问能否用FOR语句来实现。

解决方案 »

  1.   

    for i:= 1 to 23 do 
      (findcomponet('DBEDIT'+inttostr(i)) as TDBEDIT).enabled:= false;
        
      

  2.   

    你是说控件名称有修改的情况吧,但是即使写成23句,还是不能避免关联的代码改动的写23句只有在一种情况下,就是一定要考虑执行效率的情况下,牺牲可读性
    当然就这个例子来看是没有必要的,原因1是运行于PC的系统不会有那样的效率需求,2是从代码本身看由于循环只有23次,用for语句也不会增加太多开销(暂不考虑FindComponent本身又是个循环遍历)
      

  3.   

    暂不考虑FindComponent本身又是个循环遍历----------------------------------------自己用个TLIST记起来就不会又是循环遍历了。我一般都是维护扩展性优先的,如果不是可以预见效率有很显然的问题,一般都是放在第二位才考虑,因为这个问题比较没底,到底能快多少?慢多少?开发的时候是很难预料的。
      

  4.   

    procedure TForm1.Button4Click(Sender: TObject);
    var
      i:integer;
    begin
       for i:=0 to 22 do
        begin
          (self.Components[i] as TEdit).Enabled := false;
        end;
    end;end.
      

  5.   

    不如遍歷檢查某個 panel 中的所有的DBEdit,或者將所有需要特別處理的 DBEdit 的 Owner 設為特定控件,這樣,就可以用 for 來遍歷了。