为什么无法终止程序执行?(50分)

  • 主题发起人 主题发起人 babyrun
  • 开始时间 开始时间
B

babyrun

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(]一段登陆验证的代码,在密码输入不正确的情况下为什么还会显示主程序?
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {PasswordDlg};

{$R *.res}

begin
Application.Initialize;

PasswordDlg:=TPasswordDlg.Create(Application);
PasswordDlg.ShowModal;//--->登陆验证有误的情况下,应该继续停留在登陆窗口

Application.CreateForm(TForm1, Form1); //--->为什么验证有误的情况下还会继续执行?
Application.Run;
end.
======================================================
procedure TPasswordDlg.OKBtnClick(Sender: TObject);
begin
if Trim(Password.Text)='' then
begin
MessageBox(Handle,'请输入密码!','系统提示',MB_ICONINFORMATION or MB_OK);
Password.SetFocus;
Exit; //--->无法结束程序,
end;
end;

end.
 
Application.Terminate
Exit只是跳出OKBtnClick
 
{ Exit; //--->无法结束程序}
模式窗口结束后当会进后主程序
if PasswordDlg.ShowModal=mrok then //mrOk
Application.Run
else
application.Terminate;
end.
 
procedure TPasswordDlg.OKBtnClick(Sender: TObject);
begin
if Trim(Password.Text)='' then
begin
MessageBox(Handle,'请输入密码!','系统提示',MB_ICONINFORMATION or MB_OK);
Password.SetFocus;
application.Terminate;
end;
end;
 
我试过,Application.Terminate也不好用。之前写的程序,登陆验证部分用的就是exit,在密码验证错误的情况下能够正常返回验证页面。可惜那是好几年前写的了,多年不用delphi,没想到曾经处理过的问题竟然成了一道难题。不知问题出在哪里?
 
to zhengjp:
登陆程序,首先进行密码验证,验证正常显示程序主界面,否则再次显示密码验证窗口继续验证,直至正确。
现在问题是我用exit,在密码验证有误的情况下,代码依旧继续执行,然后显示主页面。无法实现,验证错误的情况下停留在密码验证窗口。不知道问题出在哪里?(几年前写的程序用的就是exit,可以实现的)
 
Exit; //--->无法结束程序, --这是肯定不能结束程序的
都是老手了,还要来问这个问题。。。。设个断点跟一下。。。不说了
 
模式窗口结束后当会进后主程序
if PasswordDlg.ShowModal=mrok then //mrOk
Application.Run
else
application.Terminate;
end.

procedure TPasswordDlg.OKBtnClick(Sender: TObject);
begin
if Trim(Password.Text)='' then
begin
MessageBox(Handle,'请输入密码!','系统提示',MB_ICONINFORMATION or MB_OK);
Password.SetFocus;
Exit; //--->无法结束程序,
end;
ModalResult := mrOk;
end;
 
to onyliu:
实在是惭愧,Delphi至少已经5年没用过了。所有的方法都试过了(包括断点),无奈还是没找到问题所在。唉......
 
看看okBtn的ModalResult设的是什么?
 
判断窗体另外创建。
 
将tandxu的稍微改一下就行了:

模式窗口结束后当会进后主程序
if PasswordDlg.ShowModal=mrok then //mrOk
Application.Run
else
application.Terminate;
end.

procedure TPasswordDlg.OKBtnClick(Sender: TObject);
begin
if Trim(Password.Text)='' then
begin
MessageBox(Handle,'请输入密码!','系统提示',MB_ICONINFORMATION or MB_OK);
Password.SetFocus;
ModalResult := mrNone; //加上这句,可以在密码不正确时重复输入密码
Exit; //--->无法结束程序,
end;
ModalResult := mrOk;
end;
 
试了一下
if PasswordDlg.ShowModal=mrok then //mrOk
Application.Run
else
application.Terminate;
end. //这个报错,类型不匹配

ModalResult := mrNone//这个确实好用
 
不是类型不匹配吧
end.移到最后就行了,最后一行若有的话就把这行删除
 
to l1_jun:
“不是类型不匹配吧
end.移到最后就行了,最后一行若有的话就把这行删除”

这个还真乎略了,回去再试一下
 
没话说了 混5年了 问这种问题。
 
这问题太简单,不知道要不要骗分.最简单的方式就是输入不正确后你就application.terminate.还有七八种方式,网上看一下资料吧.
 
谢谢各位,问题解决。
 
...,我来的时候都解决了。
 
后退
顶部