var
  controltext:string;
begin
  with tcontrolclass(sender.ClassType).Create(self) do //问题在此
    begin
       parent:=(sender as tcontrol).Parent;
       left:=(sender as tcontrol).Left+10;
       top:=(sender as tcontrol).Top+10;
       setlength(controltext,50);
       (sender as tcontrol).GetTextBuf(pchar(controltext),50);
       controltext:=pchar(controltext)+'  *';
       settextbuf(pchar(controltext));
  end;
end;
请问tcontrolclass(sender.classtype) 这句话起到了什么作用,是类型转换,还是别的还有sender as tcontrol 转换的目的是什么, 请各位高手指点
谢谢,谢谢,谢谢,谢谢

解决方案 »

  1.   

    看你的代码Sender应该是窗口类,是吗?
      

  2.   

    TControlClass(Sender.ClassType)的作用是将Sender.ClassType类转换为TControlClass类型,前提是Sender.ClassType类必须是TControlClass类或其派生类,这样转换才不会出错,另外,你的代码如果是写在TButton对象的OnClick事件中我调试是通过的,如果是写在Form的事件中,不要写在OnCreate事件中,写在OnShow事件或OnClick事件中均可以的.
      

  3.   

    这是一个<<marsting delphi 5>>中的一个例子(我简化了一下),我的意思是:当点击控件时,它就能动态建立一个相同的控件,这个例子是每个控件的onclik 事件,例子在delphi 7中试了,可以运行,结果也如预想的那样,可我还是有点不太明白。
      

  4.   

    ClassType方法在TObject中定义,返回是一个类类型(TClass = class of TObject),而不是类!
    TControlClass在帮助文件中我没找到,我想应该是找把类类型转换为具体的类,之后才能用Create.
      

  5.   

    有些东西不是都能用文字解释得清清楚楚的,大体上意思就是sender.classtype正好指名了你点击的对象的类
      

  6.   

    Tmyclass=class
              header: tlist;
              private
               arecord:^arrnode;
              public            procedure  init(k:integer);
                procedure  insert (k,a,b:integer);
                function posindex(k,a:integer):integer;
                function pos (k,a,b:integer):list;
       end;
    var
      index:integer;
      aray:array of tmyclass;
    implementation
     uses   llfbs;
    procedure tmyclass.init (k:integer);
    var
      i,len:integer;
    begin
      aray[k]:=tmyclass.Create;
      len:=ds[k].kcount;
      header:=tlist.Create;
     .............为什么单步执行到header:=tlist.create;时出错。错误提示为
    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 004AF0BB in module 'Project1.exe'. Write of address 00000004'. Process stopped. Use Step or Run to continue.
    ---------------------------
    OK   Help   
    ---------------------------
      

  7.   

    我看了一下,你所写出来的这一部分没有问题,可能是你的其他的地方有问题,是不是调用init函数的tmyclass的变量没有create啊