我有一组label(16*16=256个),用以下代码操作全部,可只有第一排(列)的有效,其他的没效。请问如何改正?还是delphi里有控件数组?
procedure TForm1.Label1Click(Sender: TObject);
begin
 with TLabel(Sender) do
  begin
   if Color=clcream then
    Color:=clred
   else
    Color:=clcream;
  end;
end;

解决方案 »

  1.   

    声明一个控件数组,然后逐一创建
    用数组下标来操作每一个控件
    并且指定每一个控件的click事件为自定义的click事件(参数相同)
      

  2.   

    建议你把所有控件的名字按顺序排列比如叫
    lab1,lab2……lab256然后用这样的方法:
    var
      j:integer;for j := 1 to 256 do
      begin
       if TLabel(findcomponent('lab' + inttostr(j))).Color=clcream then
          TLabel(findcomponent('lab' + inttostr(j))).Color:=clred
       else
          TLabel(findcomponent('lab' + inttostr(j))).Color:=clcream;
      end;
      

  3.   

    同上,也可以对所有控件循环再不知道有多少Label的情况下用这个比较好!
      

  4.   

    看看这样:把TLabel放在同一容器中(Parent相同),
    都可以利用以下形式访问(比如Form1是它们的Parent):
    for iLoop := 0 to Form1.ControlCount - 1 do
      if Form1.Controls[iLoop].ClassType = 'TLabel' then
         with (Form1.Controls[iLoop] as TLabel) do
         begin
            if Color=clcream then
                Color:=clred
            else
                Color:=clcream;
         end
      

  5.   

    我认为较正规的做法是把这些label放在一个panel上,
    begin
      for i := 0 to panel1.componentcout-1 do
        begin
          if (panel1.component[i] is TLabel) and TLabel(panel1.component[i]).color = clcream then
            TLabel(panel1.component[i]).color := clred; 
        end;
    end;
      

  6.   

    var
     i:integer;
    begin
       for i:=0 to Form1.ComponentCount-1 do
        if Form1.Components[i] is TLabel then
          with  Form1.Components[i] as TLabel do
               if color=clcream
                 {///}
                  else       
                     {///}
    end;
      

  7.   

    即然知道了有多少個Label,那可以將所有的Label的Click事件都指向Label1.onclick不就行了嗎?
      

  8.   

    我没把题目将清楚,我的意思是:label1.click=>label1.color=xx
                                 label2.click=>label2.color=xx
                                 ...
                                 label256.click=>label256.color=xx
    单个label的事件只改变自己的颜色。只是把以上代码综合到一个。
      

  9.   


    你是一列一列copy的吧  :-)
      

  10.   

    TO:laihecongxi(兴哥)   我是一列一列的copy的,难道这样不行,或者是delphi的bug,以前也有这种情况.请高手指教。
      

  11.   

    判断Sender是否等于某个Lalbe,
    如:IF Sender=Lable1 THEN ...