一个简单的问题,但小弟不会,一个字符串加一个变量组成一个控件名称.这段代码如何写呢?

解决方案 »

  1.   

    I := 1;
    S := 'Edit' + IntToStr(I);字符串是'Edit'
    变量是I
    控件名称是S
      

  2.   

    给你一个动态创建控件的例子,好好看看:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus, StdCtrls, ExtCtrls;type
      CRefType = class of Tcontrol;
      TForm1 = class(TForm)
        Panel1: TPanel;
        RadioRBtn: TRadioButton;
        MainMenu1: TMainMenu;
        File1: TMenuItem;
        New1: TMenuItem;
        Open1: TMenuItem;
        SaveAs1: TMenuItem;
        N1: TMenuItem;
        Exit1: TMenuItem;
        Help1: TMenuItem;
        About1: TMenuItem;
        ButtonRBtn: TRadioButton;
        LabelRBtn: TRadioButton;
        OpenDialog1: TOpenDialog;
        SaveDialog1: TSaveDialog;
        procedure FormCreate(Sender: TObject);
        procedure RadioRBtnClick(Sender: TObject);
        procedure ButtonRBtnClick(Sender: TObject);
        procedure LabelRBtnClick(Sender: TObject);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure New1Click(Sender: TObject);
        procedure Open1Click(Sender: TObject);
        procedure SaveAs1Click(Sender: TObject);
        procedure Exit1Click(Sender: TObject);
        procedure About1Click(Sender: TObject);
      private
        { Private declarations }
        ClassRef : CRefType;
        Counter : Integer;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      RadioRbtn.Checked :=true;
      ClassRef := TRadioButton;
      Counter:=0;
    end;procedure TForm1.RadioRBtnClick(Sender: TObject);
    begin
      ClassRef := TRadioButton;
    end;procedure TForm1.ButtonRBtnClick(Sender: TObject);
    begin
       ClassRef:=TButton;
    end;procedure TForm1.LabelRBtnClick(Sender: TObject);
    begin
      ClassRef:=TLabel;
    end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      MyObj:Tcontrol;
      Myname:String;
    begin
      MyObj:=ClassRef.Create(Self);
      MyObj.Parent :=Self;
      MyObj.Left :=x;
      Myobj.Top :=y;
      Inc(Counter);
      MyName := ClassRef.ClassName + IntToStr(Counter);
      Delete(MyName,1,1);
      MyObj.Name :=MyName;
      MyObj.Visible :=true;
    end;procedure TForm1.New1Click(Sender: TObject);
    var
      i:integer;
    begin
      for i:= ControlCount -1 downto 0 do
        if Controls[i].ClassName <> 'TPanel' then
          ConTrols[i].Free ;
      Counter:=0;
    end;procedure TForm1.Open1Click(Sender: TObject);
    var
      S:TFileStream;
      New:TComponent;
    begin
      if OpenDialog1.Execute then
      begin
        New1Click(self);{清除所有控件}
        s:= TFileStream.Create(OpenDialog1.FileName,fmopenRead );
        try
          While s.position < S.Size do
          Begin
            New:=S.ReadComponent(nil);
            InsertControl(new as TControl);
            Inc(Counter);
          End;
        finally
          s.Free ;
        end;
      end;
    end;procedure TForm1.SaveAs1Click(Sender: TObject);
    var
      S:TFileStream;
      i:integer;
    begin
      if SaveDialog1.Execute then
      begin
        S:=TfileStream.Create(SaveDialog1.FileName ,fmOpenWrite or fmCreate);
        try
          for i:=0 to ControlCount -1 do
          Begin
            if Controls[i].ClassName <>'TPanel' then
            s.WriteComponent(Controls[i]);
          End;
        finally
          s.Free ;
        end;
      end;
    end;procedure TForm1.Exit1Click(Sender: TObject);
    begin
      close;
    end;procedure TForm1.About1Click(Sender: TObject);
    begin
      Application.MessageBox('动态创建控件举例!','帮助',mb_ok +MB_ICONINFORMATION )
    end;
    initialization
      registerclasses([TRadioButton,TButton,TLabel]);
    end.
      

  3.   

    动态创建控件!
    最好是控件数组!
    如:MyEdit:array of TEdit;
    setlength(MyEdit,数组的大小);好了,直接这样调用:MyEdit(序号);
      

  4.   

    改正:不是MyEdit(序号),而是MyEdit[序号]。
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    const btnname='button';
    var
    s : tbutton;
    i: integer;
    begin
    for i:= 3 to 22 do
    begin
    s:=TButton.create(Self);
    s.name:=btnname+inttostr(i);
    s.Parent:=Form1;
    s.left:=i*50;
    s.top:=i*20;
    s.visible:=true;
    //s.onclick:=button1click;
    end;
    end;
      

  6.   

    一个简单的例子:假设窗体上有10个Edit控件,Name为默认的Edit1、Edit2....Edit10;
    现对它们批量赋值
    for i:=1 to 10 do
        TEdit(FindComponent('Edit'+IntToStr(i))).Text:=IntToStr(i);其他控件操作只需把语句中的TEdit和'Edit'改为相应控件类名即可。
      

  7.   

    谢谢上面朋友的回答,我的功能就想( fim(镇江DJ)(DJ=DelphiJava)朋友所说的那种,也就是如下:s:= 'icon_'+string1+'_0';
    s.visible:=false;
    为什么会出错呢?
      

  8.   

    var
    i:integer;
    s:string;
    begin
    I := 1;
    S := 'Edit' + IntToStr(I);
    S.visible:=false;
    end;
    为什么执行不了呢?
      

  9.   

    samcrm(镜花水月) 谢谢,实现了.结帐了.
      

  10.   

    先在窗体上放一个Edit1var
    i:integer;
    s:string;
    begin
    I := 1;
    S := 'Edit' + IntToStr(I);
    TEdit(FindComponent(S)).visible:=false;
    end;楼主再试一试