以下是俺建的测试程序,简单步骤,新建一个工程,在工程里放一个按钮,在按钮的单击事件里写两行代码.全部单元代码如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var Edit1:TEdit;
begin
  Edit1.Text:='aaaaaaaa';
  //Edit1.SetFocus;
end;end.仔细看一下效果,再把第二行的注释去掉再看一下

解决方案 »

  1.   

    没有设置 edit的位置的原因吧
      

  2.   

    edit1是自动创建的吗?
    如果不是的话也没有手动添加  应该 加上自动创建代码
      

  3.   

    procedure TForm1.Button2Click(Sender: TObject);
      var Edit2:TEdit;
    begin
      edit2.Top :=128;
      edit2.Left :=464;
      edit2.Width :=121;
      edit2.Height :=21;
      Edit2.Text:='aaaaaaaa';
      //Edit2.SetFocus;end;
    大家试试,怎么才能真正创建出文本框啊???
      

  4.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      Edit2:TEdit;
    begin
      Edit2 := TEdit.Create(Self);
      Edit2.Parent := Self;
      edit2.Top :=128;
      edit2.Left :=464;
      edit2.Width :=121;
      edit2.Height :=21;
      Edit2.Text:='aaaaaaaa';
      //Edit2.SetFocus;
    end;
      

  5.   

    logne() 的是正解。
    var
      Edit2:TEdit;
    只是说明有个变量,但没有创建前Edit2并没有句柄,也就是Edit2.Handle=nil,是个空变量,操作它会出错的。
    如果是Integer,String之类的变量系统会自动创建。
    所以如果要在运行期生成,正确的步骤是要先创建,然后再说明他的Parent是谁,告诉系统在哪里显示,然后再设置它的大小等各种属性。
      

  6.   

    我觉得用了Edit2:=TEdit.Create(self);
    那么Edit2.Parent := Self;应该是多余的了吧?
      

  7.   

    如果你写Edit2:=TEdit.Create(self);就不用指定parent了,因为我通常写Edit2:=TEdit.Create(nil);的,然后再指定它的parent,有时候它的parent不一定是窗口。
      

  8.   

    找不到Edit1
    伴水老大对这类东西比较有见解
      

  9.   

    声明了变量,却没有创建实例。
    在按钮中加上Edit2:=TEdit.Create(self);再设置其位置等属性。
      

  10.   

    估计很多人都误会网虫的意思了
    只是想知道为什么会出现这种情况
    Delphi内部是什么机制?
      

  11.   

    有意思,不过这个问题不好说,我觉得这和d的编译优化有关,因为跟踪运行,有setfocus的话,多了一个入栈指令:move eax,ebx,而这时ebx是btton1的地址,没有的话,ebx保存的是form1的地址,并且不执行上面那个指令
      

  12.   

    edit 只是一个局部变量,超出这个函数就被free了。