读书人

请问一个简单有关问题,关于控件的创建

发布时间: 2012-02-16 21:30:36 作者: rapoo

请教一个简单问题,关于控件的创建,但是偶没搞明白
以下是俺建的测试程序,简单步骤,新建一个工程,在工程里放一个按钮,在按钮的单击事件里写两行代码.全部单元代码如下:
unit Unit1;

interface

uses
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.

仔细看一下效果,再把第二行的注释去掉再看一下


[解决办法]
没有设置 edit的位置的原因吧
[解决办法]
edit1是自动创建的吗?
如果不是的话也没有手动添加 应该 加上自动创建代码
[解决办法]
挺好玩的呀。。。
[解决办法]
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;


大家试试,怎么才能真正创建出文本框啊???
[解决办法]
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;
[解决办法]
logne() 的是正解。
var
Edit2:TEdit;
只是说明有个变量,但没有创建前Edit2并没有句柄,也就是Edit2.Handle=nil,是个空变量,操作它会出错的。
如果是Integer,String之类的变量系统会自动创建。
所以如果要在运行期生成,正确的步骤是要先创建,然后再说明他的Parent是谁,告诉系统在哪里显示,然后再设置它的大小等各种属性。
[解决办法]
我觉得用了Edit2:=TEdit.Create(self);
那么Edit2.Parent := Self;应该是多余的了吧?

[解决办法]
如果你写Edit2:=TEdit.Create(self);就不用指定parent了,因为我通常写Edit2:=TEdit.Create(nil);的,然后再指定它的parent,有时候它的parent不一定是窗口。
[解决办法]
找不到Edit1
伴水老大对这类东西比较有见解
[解决办法]
声明了变量,却没有创建实例。
在按钮中加上Edit2:=TEdit.Create(self);再设置其位置等属性。
[解决办法]
估计很多人都误会网虫的意思了
只是想知道为什么会出现这种情况
Delphi内部是什么机制?
[解决办法]
我是新人
学习中

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


[解决办法]
edit 只是一个局部变量,超出这个函数就被free了。
[解决办法]
无他bug而已

读书人网 >.NET

热点推荐