以下是俺建的测试程序,简单步骤,新建一个工程,在工程里放一个按钮,在按钮的单击事件里写两行代码.全部单元代码如下:
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.仔细看一下效果,再把第二行的注释去掉再看一下
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.仔细看一下效果,再把第二行的注释去掉再看一下
如果不是的话也没有手动添加 应该 加上自动创建代码
var Edit2:TEdit;
begin
edit2.Top :=128;
edit2.Left :=464;
edit2.Width :=121;
edit2.Height :=21;
Edit2.Text:='aaaaaaaa';
//Edit2.SetFocus;end;
大家试试,怎么才能真正创建出文本框啊???
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;
var
Edit2:TEdit;
只是说明有个变量,但没有创建前Edit2并没有句柄,也就是Edit2.Handle=nil,是个空变量,操作它会出错的。
如果是Integer,String之类的变量系统会自动创建。
所以如果要在运行期生成,正确的步骤是要先创建,然后再说明他的Parent是谁,告诉系统在哪里显示,然后再设置它的大小等各种属性。
那么Edit2.Parent := Self;应该是多余的了吧?
伴水老大对这类东西比较有见解
在按钮中加上Edit2:=TEdit.Create(self);再设置其位置等属性。
只是想知道为什么会出现这种情况
Delphi内部是什么机制?