是呀,不用临时变量,使用GetComponentFromName这样的自写函数也可以实现,我只是觉得应该有类似于VC中This的做法,看来Self是不行了。

解决方案 »

  1.   

    to jeaking(空空)
    请执教确实不太明白,请一定赐教
      

  2.   

    哎?你已经把代码用With包上了,那样的话就什么前缀都不用写了阿
    但我不推荐这种做法,在With之外你是无法对Create出来的TEdit进行引用的,
    因为没有存在引用这个对象的指针!With TEdit.Create(frmMain) Do    
    //这样的话代码段里什么都不加就是对Create出来的东东操作
    Begin
      Left := 20;
      Top := 30;
      Width := 200;
      Parent:= FrmMain;
      Text := 'Hello'
      Show;
    End;
      
      

  3.   

    self 和c++中的this 作用是一样的!
    他们是应该用在class的方法(函数)定义当中的,表示调用此方法的那个对象。
    跟你说的完全是两码事!
      

  4.   

    With TEdit.Create(frmMain) do
    begin
      font.color:=clRed;
      text:='sdfgjdsg';
      ........
    end;
      

  5.   

    TO:bisc_sunny(分特中) 不要穷逗乐,行不行?
      

  6.   

    to bisc_sunny(分特中)
    因为这些空间都是动态生成的,没有办法实现定义好变量名(当然也可以采用预定义控件数组的形式),另外什么都不加,外面的值直接赋进来当然是没有问题,关键是我要付出去TEdit.Create(frmMain) 本身,而且我主要是想知道TEdit.Create(frmMain) 在它本身的with事件中能否表示,如何表示。
    to jeaking(空空)
    按照您的意思,在我对一个类进行创建的时候,除了用它的name之外,无法采用别的表示形式了?当然我知道在类本身定义的方法事件函数中都可以使用self。
    to iBear(大熊)
    呵呵。下面是我的代码:to all:
    type
      FormParams=record
        Width:integer;
        Height:integer;
        XSpace:integer;
        YSpace:integer;
        ComponentCount:integer;
        LeftTop:TPoint;
        lstCompLeftTop:TPoint;
        CurCompLeftTop:TPoint;
        LastRightButtom:Tpoint;
        LastLabel:TLabel;
      end;
    const
      LONGRULER=25;
    var
      Fp:FormParams;  function CreateComp_TEdit:boolean;
      begin
        CreateComp_TLabel;
        with TEdit.Create(frmTemp) do
        begin
          Parent:=frmTemp.BasePanel^;
          Top:=Fp.CurCompLeftTop.Y;
          Left:=Fp.CurCompLeftTop.X+Fp.XSpace;
          Name:='edt'+MyDocBody[i].FieldName;
          Enabled:=True;
          Fp.LastLabel.FocusControl:=self;//注意,关键是这一句!!
          Width:=Font.Size*MyDocBody[i].FieldLength+5;
          InCreaseState(Height,Width);
          //OnClick:=AreaChkClick;
        end;
      end;
      

  7.   

    to bisc_sunny(分特中)
    VC我是将近4年前学了一段时间,我记得可以用this::这种形式,不知道是不是,很久了,而且当时学的也不好。
      

  8.   

    type
      FormParams=record
        Width:integer;
        Height:integer;
        XSpace:integer;
        YSpace:integer;
        ComponentCount:integer;
        LeftTop:TPoint;
        lstCompLeftTop:TPoint;
        CurCompLeftTop:TPoint;
        LastRightButtom:Tpoint;
        LastLabel:TLabel;
      end;
    const
      LONGRULER=25;
    var
      Fp:FormParams;  function CreateComp_TEdit:boolean;
      begin
        CreateComp_TLabel;    tempEdit : TEdit;
        tempEdit = TEdit.Create(frmTemp);    with tempEdit do
        begin
          Parent:=frmTemp.BasePanel^;
          Top:=Fp.CurCompLeftTop.Y;
          Left:=Fp.CurCompLeftTop.X+Fp.XSpace;
          Name:='edt'+MyDocBody[i].FieldName;
          Enabled:=True;
          Fp.LastLabel.FocusControl:=tempEdit ;//注意,关键是这一句!!
          Width:=Font.Size*MyDocBody[i].FieldLength+5;
          InCreaseState(Height,Width);
          //OnClick:=AreaChkClick;
        end;
      end;
    这样不是很好么,你到底想要干什么啊?不明白!!
      

  9.   

    我有办法了!
    既然没有Name,我们可以用Components的Index来引用。procedure TForm1.Button1Click(Sender: TObject);
    var
      iCreateEditID: Integer;
    begin
      With TEdit.Create(Self) Do
      Begin
        Left := 20;
        Top := 30;
        Width := 200;
        Parent:= Self;
        Text := 'Hello';
        Show;
        iCreateEditID := ComponentIndex;
        ShowMessage(IntToStr(iCreateEditID));
        (Self.Components[iCreateEditID] as TEdit).Text := '123';
      End;
    end;你明白了吗?:)
      

  10.   

    to jeaking(空空)&&bisc_sunny(分特中)我也是在做程序中遇到这个问题,我想在With XXX do的情况下,大部分的操作再不指定前缀的时候,默认都是对当前with的对象的,我想应该delphi对此有一种表述,类似于self一样,这样的话,程序编写会简单很多,而且这些控件都是动态生成的,没有办法实现定义好变量名(当然也可以采用预定义控件数组的形式)。算是一个探讨吧,并不是针对例子中的具体问题
      

  11.   

    To bisc_sunny(分特中) c++ 里有with 嘛?我怎么不知道,用This::这是什么意思?谁给俺解释解释!
      

  12.   

    //没有办法实现定义好变量名(当然也可以采用预定义控件数组的形式)。根本不用预定义控件数组,既然你在with中直接Create, 就表示你在With 语句之外不想在引用他,所以不用预定义控件数组保存生成的每一个对象,像我那样做,只定义一个变量,每次都用他不就行了么!
      

  13.   

    to jeaking(空空)
    用!我程序的目的是根据一个配置文件,生成显示窗体及其上面的控件,因为是动态生成的所以名字是不会事先得知的。对控件的操作有统一的处理函数进行挂接,另外我的控件其命名规则也是有矩可循的。
      

  14.   

      with TEdit.Create(Self) do try
        Name := 'EditNo1';
        ShowMessage(Self.Components[Self.ComponentCount - 1].Name);
      finally
        Free;
      end;
      with TEdit.Create(nil) do try
        Parent := Self;
        Name := 'EditNo2';
        ShowMessage(Self.Controls[Self.ControlCount - 1].Name);
      finally
        Free;
      end;
      

  15.   

    为什么不这样  MyEdit:=nil;
      GetMem(MyEdit,sizeof(Tedit));
      MyEdit^:=(TEdit.Create(form1));
      再用 with myedit^ do呢
      

  16.   

    to zswang(伴水)(需要充充电)
    你的self其实是TEdit所在Form。对于Unit(无frm)无法编译。to qiubolecn(来自差生市)&&jeaking(空空)
     
    我想在With XXX do的情况下,大部分的操作再不指定前缀的时候,默认都是对当前with的对象的,我想应该delphi对此有一种表述,类似于self一样,这样的话,程序编写会简单很多。看来是不行,结贴。谢谢大家参与
      

  17.   

    to zswang(伴水)(需要充充电)
    不过能够解决我程序中的问题,谢谢。
      

  18.   

    在delphi中通常的vcl对象实际上就是指向对象的指针(用过bcb就明白了),因此
    p:^TEdit这样的定义是没什么意义的