我写了个程序,Form1(主),Form2,unit1,unit2,unit3
程序开始运行后就隐藏form1和form2,工程文件代码program Project2;uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas';{$R *.res}begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
//Form2.Show;
Application.ShowMainForm:=false;
Application.Run;End.1.都隐藏后通过一些条件判断显示哪个FORM,我把判断条件写在了Form.Create中,伪码:
procedure TForm1.FormCreate(Sender: TObject);
if 条件=真 显示Form1(主),毁掉Form2, //这里不知道该怎么写
if条件=假 显示 Form2,(把Form1隐藏),这里我是这样写的:Form2:=TForm2.Create(Application);
Form2.show;
2.Form2里面:
有二个按钮btn1,btn2:
btn1: 通过条件判断: if 条件为真 显示Form1(主),毁掉Form2,//这里不知道该怎么写
if条件为假 只showmessage
btn2: 直接显示Form1,毁掉Form2 //这里不知道该怎么写
Form2close事件:如果Form2被用户点关闭了,则同时也关闭FORM1,程序结束 //这里不知道该怎么写烦请各位达人指教下:程序这样是否规范,是否有需要注意的地方
程序开始运行后就隐藏form1和form2,工程文件代码program Project2;uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas';{$R *.res}begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
//Form2.Show;
Application.ShowMainForm:=false;
Application.Run;End.1.都隐藏后通过一些条件判断显示哪个FORM,我把判断条件写在了Form.Create中,伪码:
procedure TForm1.FormCreate(Sender: TObject);
if 条件=真 显示Form1(主),毁掉Form2, //这里不知道该怎么写
if条件=假 显示 Form2,(把Form1隐藏),这里我是这样写的:Form2:=TForm2.Create(Application);
Form2.show;
2.Form2里面:
有二个按钮btn1,btn2:
btn1: 通过条件判断: if 条件为真 显示Form1(主),毁掉Form2,//这里不知道该怎么写
if条件为假 只showmessage
btn2: 直接显示Form1,毁掉Form2 //这里不知道该怎么写
Form2close事件:如果Form2被用户点关闭了,则同时也关闭FORM1,程序结束 //这里不知道该怎么写烦请各位达人指教下:程序这样是否规范,是否有需要注意的地方
解决方案 »
- 一些问题困扰我???
- 让窗体上tag=2的控件的ReadOnly=true
- UDP和TCP有什么区分?TServerSocket , TClientSocket 是什么方式传输?
- D7+MSsqlserver2000程序,通过ADOQuery对表进行付值时出现的问题。我用以下语句为数据表列赋值,数据表列[decimal]型(28位,10位小数)。ADO
- Tquery和Tadoquery有什么不同?大虾,我刚才重新试过,在线,
- 不懂!?大家帮我看看这个问题吧!
- 散分! TMD ,两个多星期了,直到今天才能登陆 论坛。CSDN 到底在干啥?
- 关于文件读写的问题
- 如何用QUERY做主细表打印?
- 如何在安装程序中设置BDE参数?
- TreeView如何获取子节点的值
- 淘宝问题,给100分
begin
if True then
// if False then
begin
Form1.Show;
Form2.Free;
end
else
begin
Form2 := TForm2.Create(Application);
Form2.Show;
Form2.Caption := 'Form2 in TForm1.FormCreate';
end;
end;当条件为真时,Form1显示,但Form2.Free实际上是不起作用的,因为此时Form2还没有创建,Form2=nil
当条件为假时,创建并显示Form2,但这里的Form2和之后Application.CreateForm创建的Form2并不是同一个实例
另外,由于Application首先创建的是Form1,它也就是程序的主窗体,而Form2不是,因此不能通过关闭Form2窗体结束Application。而主窗体Form1又被隐藏了,无非由用户关闭。这时就需要在其他地方显式的采用Application.Terminate或Form1.Close来结束Application2、第2条示意代码如下procedure TForm2.Button1Click(Sender: TObject);
begin
if True then
// if False then
begin
Form1.Show;
ShowMessage(Form2.Caption);
Form2.Free;
end
else
begin
ShowMessage('False in TForm2.Button1Click');
end;
end;procedure TForm2.Button2Click(Sender: TObject);
begin
Form1.Show;
ShowMessage(Form2.Caption);
Form2.Free;
end;procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Close;
end;btn1事件函数中条件为假时显示提示没有问题,条件为真时显示Form1可以,但下面一句Form2.Free时释放的却是Application.CreateForm所创建的Form2
btn2事件函数同样
FormClose事件函数没有问题,可通过Form1即主窗体的关闭结束整个程序
这样的窗口显示控制应当直接在Project单元或同一个窗体单元(如主窗体)中实现
尽量避免单元的交叉引用,尽管Delphi允许这样做