主窗口main_frm 放了三个按钮 想实现三种不同的测试功能 结构是一样的 只是内部的算法不同 请问该怎么实现? 下面是我写的代码 请问错在哪里?在main_frm 中 代码如下const CeShiYi=1;
CeShiEr=2;
CeShiSan=3;
procedure Tmain_frm.bt1Click(Sender:TObject);
begin
if my_frm=nil then
my_frm:=Tmy_frm.Create(Self,1);
my_frm.Show;
end;procedure Tmain_frm.bt2Click(Sender: TObject);
begin
if my_frm=nil then
my_frm:=Tmy_frm.Create(Self, 2);
my_frm.Show;
end;procedure Tmain_frm.bt3Click(Sender: TObject);
begin
if my_frm=nil then
my_frm:=Tmy_frm.Create(Self, 3);
my_frm.Show;
end;
在my_frm中 代码如下var W:integer;procedure Tmy_frm.FormPaint(Sender: TObject);
begin
if W=1 then
begin
...........
end;
if W=2 then
begin
.........
end;
if W=3 then
begin
........
end;end;
CeShiEr=2;
CeShiSan=3;
procedure Tmain_frm.bt1Click(Sender:TObject);
begin
if my_frm=nil then
my_frm:=Tmy_frm.Create(Self,1);
my_frm.Show;
end;procedure Tmain_frm.bt2Click(Sender: TObject);
begin
if my_frm=nil then
my_frm:=Tmy_frm.Create(Self, 2);
my_frm.Show;
end;procedure Tmain_frm.bt3Click(Sender: TObject);
begin
if my_frm=nil then
my_frm:=Tmy_frm.Create(Self, 3);
my_frm.Show;
end;
在my_frm中 代码如下var W:integer;procedure Tmy_frm.FormPaint(Sender: TObject);
begin
if W=1 then
begin
...........
end;
if W=2 then
begin
.........
end;
if W=3 then
begin
........
end;end;
三个按钮使用同一个事件:
代码
procedure Tmain_frm.btCommonClick(Sender: TObject);
begin
if my_frm=nil then
my_frm:=Tmy_frm.Create(Self, (Sender as TButton).Tag);
my_frm.Show;
end;
一种是在Tmy_frm重写Create
constructor Tmy_frm.Create(AOwner: TComponent; AW: Integer);
begin
inherited Create(AOwner);
W := AW;
end;调用
调用时
procedure Tmain_frm.btCommonClick(Sender: TObject);
begin
if my_frm=nil then
my_frm:=Tmy_frm.Create(Self, (Sender as TButton).Tag);
my_frm.Show;
end;第二种,因为你W定义了全局,最好建议是定义成Tmy_frm的属性.
property W: Integer read FW write FW;调用:
procedure Tmain_frm.btCommonClick(Sender: TObject);
begin
if my_frm=nil then
begin
my_frm:=Tmy_frm.Create(Self);
my_frm.W := (Sender as TButton).Tag;
end;
my_frm.Show;
end;
主要是你给w赋值,应该是在窗体的create事件里吧?
而你
if my_frm=nil then
my_frm:=Tmy_frm.Create(Self, 3);判断my_frm为nil的时候,才创建my_frm,可是,你没有释放my_frm,所以,第二次运行的时候不会触发你的create事件,总得来说,只有点的第一个按钮好用,到第二个和第三个按钮的时候,无事件反映。
if my_frm=nil then
my_frm:=Tmy_frm.Create(Self);
my_frm.W:=1;
my_frm.Show;
1:如:3楼,不过if my_frm=nil then
begin
my_frm:=Tmy_frm.Create(Self);
end;
my_frm.W := (Sender as TButton).Tag; 这句要放到外面
2:
try
if my_frm=nil then
my_frm:=Tmy_frm.Create(Self,1);
my_frm.ShowModal;
finally
my_frm.free;
end;
if my_frm<> nil then my_frm.Free;
应该也可以
procedure Tmain_frm.bt1Click(Sender: TObject);
begin
if my_frm=nil then
begin
my_frm:=Tmy_frm.Create(Self);
my_frm.W := (Sender as TButton).Tag;
end;
my_frm.Show;
end;
在my_frm中 public constructor Create(AOwner: TComponent; AW: integer);
{ Public declarations }
property W: Integer read FW write FW; end;
请问这样定义W可以吗?
{ Public declarations }
w :integer;
Constructor Create(AOwner: TComponent;s:Integer);constructor TForm2.Create(AOwner: TComponent;s:Integer);
begin
inherited Create(AOwner);
w:= s;
end;procedure TForm2.Button1Click(Sender: TObject);
begin
// showmessage(inttostr(w));
case w of
1 : ;
2 : ;
end;
end;窗体调用procedure TForm1.Button1Click(Sender: TObject);
begin
if Form2 <> nil then Form2.Free;
Form2:= TForm2.Create(self,2);
// Form2:= TForm2.Create(self,1);
Form2.Show;
end;
这句,放错位置了,应该if my_frm=nil then
begin
my_frm:=Tmy_frm.Create(Self);
end;
my_frm.W := (Sender as TButton).Tag;my_frm.Show;
end;
to chenzhuo 谢谢 都非常好 谢谢大家的帮忙