我定义了PanelArray,PanelArray1 2个数组,动态的生成了54个Panel,但是我想编写OnClick事件,如何做才能做到,我点那个Panel,就去触发那个Panel的OnClick 呢?
  我想到方法要么就点一下全部触发,要么只能触发一个。
  那位大哥有好点的方法呢?

解决方案 »

  1.   

    procedure TForm1.Panel1Click(Sender: TObject);
    begin
      //
    end;注意那个Sender。可以这样来处理procedure DycPanelClick(Sender: TObject);
    begin
      ShowMessage(TPanel(Sender).Name);
      ShowMessage(IntToStr(TPanel(Sender).Tag));
    end;
      

  2.   


    自定义click事件
    procedure TForm1.MyClick(Sender: TObject);
    begin
      ShowMessage(TPanel(Sender).Caption);
    end;
    新建panel
    procedure TForm1.Button2Click(Sender: TObject);
    var
      p:TPanel;
    begin
      p := TPanel.Create(Self);
      p.Parent := Self;
      p.Caption := 'mypanel';
      p.OnClick := Self.MyClick;//赋予事件end;
      

  3.   

    刚刚自己想了个办法 不知道有没有不好地方
    //在创建的时候调用自己定义的OnClick
    PanelArray1[I].OnClick:=PanelClick
    //自己定义了个OnClick函数
    procedure  TForm1.PanelClick(Sender:TObject);
    var
      i:Integer;
    begin
      for I :=Low(PanelArray1)to High(PanelArray1) do
      begin
        if TPanel(Sender)=PanelArray1[I] then
            PanelArray1[I].Visible:=False;
      end;  end;不知道有什么不妥当的地方
      

  4.   


      procedure TForm1.PanelClick(Sender: TObject);   
      begin   
        ShowMessage('1');   
      end;     procedure TForm1.FormCreate(Sender: TObject);   
      begin
      ....    
       Panel1.OnClick:=PanelClick;
      end; 自定义一个如:PanelClick(Sender: TObject);
    注意参数要一样
      

  5.   


    //在创建的时候调用自己定义的OnClick
    PanelArray1[I].OnClick:=PanelClick    //創建時對每個TAG進行賦順序值。
    //自己定义了个OnClick函数
    procedure  TForm1.PanelClick(Sender:TObject);
    var
      i:Integer;
    begin
      if Sender is Tpanel then 
      begin
       case Tpanel(Sender).tag of 
        0: showMessage(' 你點擊了第1個PANEL');
        1:showMessage(' 你點擊了第2個PANEL');
        2:showMessage(' 你點擊了第3個PANEL');
      end;end;