for j:= 0 to PanelM.ControlCount -1 do
  begin
    if PanelM.Controls[j] is TLabel      then ((PanelM.Controls[j]) as TLabel).OnClick    := OnMyClick;
    if PanelM.Controls[j] is TEdit       then ((PanelM.Controls[j]) as TEdit).OnClick     := OnMyClick;
    if PanelM.Controls[j] is TButton     then ((PanelM.Controls[j]) as TButton).OnClick   := OnMyClick;
    if PanelM.Controls[j] is TPanel      then ((PanelM.Controls[j]) as TPanel).OnClick    := OnMyClick;
    if PanelM.Controls[j] is TyMeter     then ((PanelM.Controls[j]) as TyMeter).OnClick   := OnMyClick;
  end;简而言之,就是将PanelM上所有控件的点击响应设定为OnMyClick,当然,上面的代码是可以实现的,但是PanelM上面控件类型太多,且不可预料,完全是堆砌代码了。所以求一个简短的代码

解决方案 »

  1.   

    for j:= 0 to PanelM.ControlCount -1 do
    begin
      if PanelM.Controls[j] is TControl then ((PanelM.Controls[j]) as TControl).OnClick := OnMyClick;
    end;  
      

  2.   

    两种办法:
    1: type TCrackControl = class(TControl);
        (.... as TCrackControl ).OnClick := OnMyClick;
    2: 用RTTI GetXProperty SetXProperty 之类的东东
      

  3.   

    可以更简单,因为 PanelM.Controls[j]就是TControl类型,所以无需判断和转换,直接赋值就OK。
    for j:= 0 to PanelM.ControlCount -1 do
    begin
      PanelM.Controls[j].OnClick := OnMyClick;
    end;
      

  4.   

    如果有一个公共基类,OnClick是基类的方法/属性,就好了
    否则,试一试getmethod('OnClick')之类的做法
      

  5.   

    TyMeter是什么?要清楚这些控件继承的是什么类,才好合并
    大多数的都是从TControl来的,都有OnClick事件,所以不用再分的很细,特别的就特别处理,比如:for j:= 0 to PanelM.ControlCount -1 do
    begin
    if PanelM.Controls[j] is TyMeter then ((PanelM.Controls[j]) as TyMeter).OnClick := OnMyClick
    else
      TControl(PanelM.Controls[j]).OnClick := OnMyClick;
    end;
      

  6.   

    为什么上面这么多人说 PanelM.Controls[j].OnClick 这样就可以这个到底怎么使用????
    好像7楼的第2种办法有点靠谱。。
      

  7.   

    还有一种办法,把OnClick写到private的上面。然后在需要把需要用这个事件的控件的OnClick都选择这个事件就可以了。不用写代码。但这个前提是控件不是动态创建的。(但是如果是动态创建,你完全可以动态指定了,上面的问题也就没有意义了)
      

  8.   

    不可以,因为TControl的属性OnClick是protected的,不是public或published,只有子类可以访问,不能直接使用PanelM.Controls[j].OnClick这样的形式。
    而用7L的第一种方法就可以了
      

  9.   

    估计LZ的OnMyClick就是在private的上面
      

  10.   

    不知道赞成TControl(objXXX).onClick := myClick;大侠们,你们的代码是如何能编译的。反正我在D7上是无法编译的。-__-!
      

  11.   

    那直接把事件都选到成OnClick就可以了,其实在Private中也可的。为什么还要动态指定呢?
      

  12.   

    结贴了。我是要做一个类似DELPHI窗体编辑器的东西,经过实验,暂时只找到RTTI和反射的方法可以办到。。否则就只有堆砌代码了。感谢楼上各位。