关于窗体控制的问题,急!!请高手指教。 ( 积分: 200 )

  • 主题发起人 主题发起人 xxxander
  • 开始时间 开始时间
X

xxxander

Unregistered / Unconfirmed
GUEST, unregistred user!
我程序包括两个窗体Form1,form2, Form1 是主窗体,在Form1上创建两个按钮Button1, Button2,form2动态创建,在按下Button1时创建。

procedure TForm1.Button1Click(Sender: TObject);
begin
form2 := tform2.Create(self);
form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form2.Caption :='新建窗体';
end;

这样我运行程序的时候,按两次Button1,就会创建两个Form2窗体,当我按Button2时,
只有后建立起来的Form2窗体的Caption变成了 新建窗体,第一个建立起来的窗体没有反应。
我想请问一下,我怎么才能再操作第一个建立起来的窗口?
 
var fomlist: tlist;
procedure TForm1.FormCreate(Sender: TObject);
begin
fomlist:= tlist.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
form2 := tform2.Create(self);
fomlist.add(form2);
form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Tform2(fomlist[0]).Caption :='新建窗体';
end;
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Unit2;//注意这里,要把对form2所在单元的引用放在这里

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
frm2Array:Array of TForm2;
frm2Count:integer=0;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
inc(frm2Count);
Setlength(frm2Array,frm2Count);
frm2Array[frm2Count-1]:=tform2.Create(self);
frm2Array[frm2Count-1].Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
frm2Array[frm2Count-1].Caption :='新建窗体';
//frm2Count-1 可根据需要进行指定,比如0,1等,这样就可以随意控制了
end;

end.
 
第二次按button1时,form2变量指向了这个时候创建的TForm2对象,此时对form2变量的操作即是对这个TForm2对象的操作。第一次按时创建的TForm2对象丢失了指针引用,即没有任何变量指向了第一次按时创建的TForm2对象了,此时没有办法对开始创建的TForm2对象进行操作了。因此你必须在OnClick事件中分别保存form2变量的值。如:
var
PoniterArray: array of Pointer;
procedure TForm1.Button1Click(Sender: TObject);
begin
form2 := tform2.Create(self);
SetLength(PointerArray, Length(PointerArray) + 1);
PointerArray[Length(PointerArray)-1] := Pointer(form2);
form2.Show;

end;

这样的话每次Click创建的TForm2对象的指针引用值都保存在PointerArray数组里了,用的时候从里面取出即可,如下:

TForm2(PointerArray[0]).Caption := '';
TForm2(PointerArray[1]).Caption := '';
......
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部