procedure TForm1.Button2Click(Sender: TObject);
var
   pan:   array of array of Tpanel;
    x,y,m,n:   integer;
begin
    m := strtoint(edit1.Text);  //行数
    n := strtoint(edit2.Text);  //列数
   SetLength(pan,m);
     for x := 0 to m-1 do
      begin
            SetLength(pan[x],n);
            for y := 0 to n-1 do
                  begin
                        pan[x,y] := Tpanel.Create(self);
                        pan[x,y].parent := Panel2;
                        pan[x,y].Left := y*30;
                        pan[x,y].Top := x*30;
                        pan[x,y].Height := 30;
                        pan[x,y].Width := 30;
                        pan[x,y].Caption := inttostr(x) + '_' + inttostr(y);
                        pan[x,y].Color := clskyblue;
                       // pan[x,y].OnClick := panClick;                   end;
    end;end;比如让被选中的panel变成红色 还有就是用鼠标拖可以选择多个panel让其全变成红色

解决方案 »

  1.   

    动态生成的panel的事件代码怎么写 比如用鼠标拖动选中的panel变成红色 追加一个问题用完之后在哪释放panel 因为我如果先生成是5*5的话 再想生成3*3的只会把原来生成的覆盖一部分
      

  2.   

    最好先放个panel,然后事件生成代码。
    写好测试好删除panel,留下代码。用TPanel(sender).name或者tag区分之。
      

  3.   

    先自定义事件,再赋给 panel 事件。
      

  4.   

     // pan[x,y].OnClick := panClick;有什么问题?
      

  5.   

    TPanel提供了方法指针,你只要写好了赋值给它就好了
      

  6.   

    // pan[x,y].OnClick := panClick;可能是你没写panClick过程,按foxyy8888的,先放个panel,然后事件生成代码。写好测试好删除panel,留下代码。再用TPanel(sender).name或者tag区分之。
      

  7.   

    在事件里遍历pan[x,y]数组,找出Sender是谁。循环遍历数组,把pan[x,y]都释放。