我相继提了两个问题:“如何动态增加控件”和“如何给动态增加的控件写事件”都得到回答并解决。现在难点是:我动态增加的控件是同样的,但个数不定,要如何区分点击的是哪一个?

解决方案 »

  1.   

    在OnClick事件里把控件名称的地方用sender来代替这样就可以了
      

  2.   

    你生成的空间的name是不一样的啊
      

  3.   

    还有设置Tag 这样就可以判断
      

  4.   

    创建时指定对象的Tag!然后在事件中处理如下:
    case (sender as T***).tag of 
    0:
    1:
    end;
      

  5.   

    或者是(sender as TOBject).name
    不好意思,楼上已经说了
      

  6.   

    设置tag好像可以解决。
    我试试。
    谢谢大家。
      

  7.   

    顺便再问一下,个数不定,case语句怎么写?
      

  8.   

    还有你需要注意有些控件是没有Tag属性的!
    还有如果你不是每个控件对应的事件不同的话最好也不要用case语句
      

  9.   

    好像不行呀procedure Tform1.btnclick(sender:TObject)
    begin
      case (sender as Tobject).tag of 
      0:
      1:
      end;
    end;  
    编译通不过
      

  10.   

    tobject要该为你所用的类。
    比如TEdit等。
      

  11.   

    利用Sender本身就可以了,因为类实例指针本身就不同~~~加上Name,Tag显得多余
      

  12.   

    ehom(?!):能不能详细点?
      

  13.   

    如:动态创建控件实例
    Btn:=TButton.Create(Self);
    Btn.OnClick:=MyClick;在MyClick过程中的的Sender就是该实例的指针可直接用"="判断其是否相等,相等就是相关某一控件的产生的事件,可看VCL中的相关代码了解该流程,看看控件接受消息后怎样传递实例指针给事件处理过程。as是强制类型转换符
      

  14.   

    已经解决了,就是设置tag(这样简单),而且tag可作为参数使用,不用case了。
    ehom(?!)的方法复杂些,有空再研究。