我一共有三个窗体FORM1,FORM2,FORM3。
form1是主窗体,
form2是登陆窗体,
form3是form1的一个子窗体。
我的要求是 在打开主窗体之前先打开登录窗体,然后在点button1以后,登陆窗体隐藏,主窗体打开,
最后在窗体的菜单点击asdf1Click按钮他就打开form3这个子窗体。
代码如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
application.CreateForm(Tform2,form2);
form2.show;
end;procedure TForm2.Button1Click(Sender: TObject);
begin
form2.hide;
application.CreateForm(Tform1,form1);
form1.Show;
end;procedure TForm1.asdf1Click(Sender: TObject);
begin
application.CreateForm(Tform3,form3);
form3.show;
end;最后在点击菜单asdf1Click按钮时候报错,提示 can not create form,no mdi forms are currently active
project options中已经把主窗体form2,form3调到右边来,
各位大哥帮帮忙有点急。谢谢了
form1是主窗体,
form2是登陆窗体,
form3是form1的一个子窗体。
我的要求是 在打开主窗体之前先打开登录窗体,然后在点button1以后,登陆窗体隐藏,主窗体打开,
最后在窗体的菜单点击asdf1Click按钮他就打开form3这个子窗体。
代码如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
application.CreateForm(Tform2,form2);
form2.show;
end;procedure TForm2.Button1Click(Sender: TObject);
begin
form2.hide;
application.CreateForm(Tform1,form1);
form1.Show;
end;procedure TForm1.asdf1Click(Sender: TObject);
begin
application.CreateForm(Tform3,form3);
form3.show;
end;最后在点击菜单asdf1Click按钮时候报错,提示 can not create form,no mdi forms are currently active
project options中已经把主窗体form2,form3调到右边来,
各位大哥帮帮忙有点急。谢谢了
写这句话之前,是不是应该判断一下form1是不是已经创建?一般程序登录可以这样实现:
1、在form2中写一个全局函数Login:Boolean;返回是不是可以登录。
2、在工程代码中调用Login,如果返回True,再创建Form1.如果form1、form3是MDI窗体,应该把form1的formstyle设置成frmMDIForm、把form3的formstyle设置成frmMDIChild。
还有那个formstyle已经调成formmdiform,formmdichild了。
把Auto-creates中的form3移除。
登录窗体先显示,登录后显示主窗体用两个窗口举例如下:
FORM1是主窗体,FORM2是动态生成的登陆窗体(project - > options中的forms页面,把form2从左边拖到右边去),form2上面有两个按钮,一个是登陆,一个是取消,对应代码分别如下:form2的代码:unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
begin
ModalResult := mrOk;
end;procedure TForm2.Button2Click(Sender: TObject);
begin
ModalResult := mrCancel;
end;end.然后在工程文件中,默认为project1.pas, 代码如下:program Project1;uses
Forms,
Controls,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};{$R *.res}begin
Application.Initialize;
Form2 := TForm2.Create(nil);
try
if Form2.ShowModal = mrOk then begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
finally
Form2.Free;
end;
end.运行,查看效果,会发现程序先出现的是form2,当点击了登陆按钮,可以显示主窗体,否则程序结束。至于你说的数据连接窗口,同样的方法,自己编码控制吧。
还有我本来就是动态窗体调用的,已经将PROJECT OPTION中的from2和form3调到右边了
你把登录窗体设为主窗体,然后把FORM1移出去,应该就可以了