首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于delphi 窗体切换有关问题

2013-02-17 
关于delphi 窗体切换问题本帖最后由 lyyailxj13 于 2013-01-23 15:48:23 编辑现有3个窗体 1、2、3,2是主窗体

关于delphi 窗体切换问题
本帖最后由 lyyailxj13 于 2013-01-23 15:48:23 编辑 现有3个窗体 1、2、3,2是主窗体 1是登录窗体,1首先显示,登录成功后 1free 2显示,2关闭时候弹出3 
3上面有选择 关闭 或 注销,注销就是打开1 同时关闭3 因为2是主窗体不能关闭 

program SysLogin;

uses
  Forms,
  Frm_login in 'Frm_login.pas' {FrmLogin},//1
  Frm_Main in 'Frm_Main.pas' {FrmMain},// 2
  DMUnit in 'DMUnit.pas' {DM: TDataModule},/
  Unit1 in 'Unit1.pas' {Form1};//3

{$R *.res}
var
  FrmLogin: TFrmLogin;
begin
  Application.Initialize;
  Application.CreateForm(TDM, DM);
  Application.CreateForm(TFrmMain, FrmMain);//2
  Application.CreateForm(TForm1, Form1);//3
  FrmLogin:=TFrmLogin.Create(nil);//1
  try
    FrmLogin.ShowModal;
  Finally
    FrmLogin.Free;
  end;
  Application.Run;
end.

如何实现啊 因为1已经free了 我在3上面选择注销 就报错 1根本show不出来,能否点击注销时 重新运行程序呢?或者 重新creat1窗体
[解决办法]
做了个小例子

项目文件

program Project8;

uses
  ExceptionLog,
  Forms,
  frm_main in 'frm_main.pas' {FrmMain},
  frm_Login in 'frm_Login.pas' {FrmLogin},
  frm_QueryClose in 'frm_QueryClose.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TFrmMain, FrmMain);
//  Application.CreateForm(TFrmLogin, FrmLogin);
//  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


//主窗体单元文件
unit frm_main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TFrmMain = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    procedure Login;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmMain: TFrmMain;

implementation
uses frm_Login, frm_QueryClose;
{$R *.dfm}

procedure TFrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  //选择 关闭 或 注销 的窗口
  with TForm1.Create(self) do
  try
    if mb_ok = ShowModal then    //关闭, 则程序退出
      Application.Terminate;

    Login;
  finally
    free;
  end;
end;

procedure TFrmMain.Login;
begin
  with TFrmLogin.Create(self) do
  try
    if mb_ok <> ShowModal then    //登录失败后程序退出


      Application.Terminate;
  finally
    free;
  end;
end;

procedure TFrmMain.FormCreate(Sender: TObject);
begin
  Login;
end;

end.

热点排行