用 RTTI 实现, TObject 本身一些方法提供了你所需要的数据,比如 ClassInfo() 即是指向 RTTI 信息的指针,得到这个指针就可以获得该类的相关信息

解决方案 »

  1.   

    如果只是为了得到组件名的话,可以用 TComponent.Name 得到
      

  2.   

    首先否定用Tcomponent.Name的方法,它不能得到动态生成组件的名字.我曾试这用
    它的一些事件,倒是可以得到当前组件的名称但是又不能聚焦到下一个组件,例如它
    的click事件用(sender as Tedit).name 得到就是它的组件名称,但是该怎样聚焦到下
    一个组件哪??
      

  3.   

    我写了一个例子供你参考:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
        procedure DoKeyPress(Sender: TObject; var Key: Char);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      P: Pointer;
      I: Integer;
    begin
      for I := 1 to 5 do
      begin
        P := TEdit.Create(Self);
        TEdit(P).Parent := Self;
        TEdit(P).OnKeyPress := DoKeyPress;
        TEdit(P).Top := I * 30;
        TEdit(P).Tag := 133; // Mark as dynamic create control
      end;
    end;procedure TForm1.DoKeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #13 then
      begin
        SelectNext(ActiveControl, True, True);
        Key := #0; // aviod beep
      end;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    var
      I: Integer;
    begin
      for I := Self.ControlCount - 1 downto 0 do
        if Self.Controls[I].Tag = 133 then
          Self.Controls[I].Free;
    end;end.此例子中的动态释放部份采用了偷懒的办法,在正式的项目中应该建立指针链表来维护,可以参考我编写的TBottomFrame(实际上是一个任务列表条)中动态创建、释放按钮的源码。