在Delphi中是否可以设置控件数组!象VB中的一样?

解决方案 »

  1.   

    下面是别人的回答,但我要多次用每个控件,用TAG的方法,每次我都要进行判断,好像效果不好.能不能声名为: Images: array [1..16] of TImage; 就表示窗体上的16个Image控件?所谓控件数组可以简单理解为具有相同name属性的控件集合,如绘制10个TEXT控件,它们的NAME属性均为txtindex。通过使用控件数组,可以使这些TEXT控件共享相同的事件过程。
    在delphi里。我觉的要按概念来讲是不可能产生同名控件但能够达到这种效果。但是所谓的事件可以在设计阶段可以将所有的button选中设置它们的onclick事件为同一事件。
    或者如下例:
    通过设置一组相应控件的TAG属性来实现这一功能。首先在窗体中放置3个BUTTON控件,然后分别设置这三个控件的TAG属性为1、2、3。接下来双击任意一个按钮, 
    在其代码部分输入如下代码: 
    procedureTForm1.Button1Click(Sender:TObject); 
    begin 
    caseT Button(sender).Tag of 
    1:ShowMessage(′1stButtonPressed′); 
    2:ShowMessage(′2ndButtonPressed′); 
    3:ShowMessage(′3rdButtonPressed′); 
    end; 
    end; 
    最后在其他两个按钮的ONCLICK事件中选择已经编好的代码。这样一来就可以实现以上功能了。 
      

  2.   


    一句话,"有即是无,无即是有" ...有很多方法实现, wangzn1979(梦郎2001) 说的是一种,
    这也是一种:只要TEdit放在同一容器中(Parent相同),
    都可以利用以下形式访问(比如Form1是它们的Parent):
    for iLoop := 0 to Form1.ControlCount - 1 do
      if Form1.Controls[iLoop].ClassType = 'TEdit' then
         (Form1.Controls[iLoop] as TEdit).Text := 'A'
      

  3.   

    这样做是否合适?在Form上放置10个Panel
    在private中声名: Panels:array [1..10] of TPanel
    然后在OnCreate中这样做: 
    Panels[1]:=Panel1;
    Panels[2]:=Panel2;
    ...有没有什么坏处?
      

  4.   

    Panel1都存在了你还要Panels[1]干嘛?
      

  5.   

    同意 LKJ99(阳江in深圳,路在何方...)
      

  6.   

    var
      DBEdtArray: array[0..100] of TDBEdit;
      I,J: integer;
    /////
      J := 0;
      for I := 0  to Self.ComponentCount - 1 do
        if Self.Components[i] is TDBEdit  then
        begin
          DBEdtArray[J] := TDBEdit(Self.Components[I]);
          Inc(J,1);
        end;
      

  7.   

    有的,我已经答过好几道这样的题了.如,
    MyButton: array [0..n] of TButton;