procedure TForm1.Label1Click(Sender: TObject);
begin
if  F= False then  //F为一全局变量
form2.show 
else
form3.show;end;form2为登陆窗体,在登陆验证通过后,怎样在登陆窗体(form2)与Form1窗体间通信?使得登陆验证通过后出现form3。

解决方案 »

  1.   


    在FORM2的登录界面验证后,调用FROM3.SHOW
      

  2.   

    1.在form2的身份验证按钮中写处理,通过验证后
      form3.show;
      form2.close;
    2.在form1中设定一全局变量vg_dl:boolean,在form1的相关处理中这样写
    form1.vg_dl:=false;
    form2.showmodal;
    if form1.vg_dl=false then
      messagebox(application.handle,'未通过身份验证','信息',mb_ok or mb_iconinformation)
    else
      form3.show;在form2的身份验证按钮中写代码
    if 通过身份验证 then
      form1.vg_dl:=true
    else
      form1.vg_dl:=false;
    在form2的关闭按钮中写代码
    form1.vg_dl:=false;
    form2.close;
      

  3.   

    1.在form2的身份验证按钮中写处理,通过验证后 
      form3.show; 
      form2.close; 
    form2为登陆验证窗体,不可能在form2的身份验证按钮中写 form3.show; 
    procedure TForm1.Label1Click(Sender: TObject);
    label
      mylabel;
    begin
    mylabel:if  F= True then
    form3.show
    else
    form2.show;  //登陆验证窗体
    goto mylabelend;
    这样改是希望form2.show验证通过后,继续执行goto mylabel,这样就会执行form3.show,但是登陆窗体验证通过后,程序并不能返回到原来form2.show; 后面的位置继续执行。
      

  4.   

    我另找了一个方法:
    建立一个名为saide的全局变量,每点击不同的Label,为全局变量赋相应的值,如下所示:procedure TForm1.Label1Click(Sender: TObject);
    begin
    if  F= False then
    form2.show;
    else
    saide:='form3.show';
    form3.show;
    end;在登陆窗体中
    procedure TForm2.Button1Click(Sender: TObject);
    begin
    //加一些验证登陆的代码
    Form2.hide;
    saide;  //在这里用全局变量确定那一个窗体出现
    end;可是编译通不过,请问怎么改?
    [Error] Unit2.pas(32): Statement expected, but expression of type 'String' found
    [Fatal Error] Unit1.pas(33): Could not compile used unit 'Unit2.pas'
      

  5.   

    saide是个字符串,你想的是form3.show.可是你写的却是个字符串。
    写个进程吧。
      

  6.   

    F是一个表示登录的标记吗?变量最好改成能表示其作用的名字
    procedure TForm1.Label1Click(Sender: TObject);
    begin
      if not F then  //F为一全局变量
        form2.show;  if F then
        form3.show;
    end; 
      

  7.   

    F和saide都是全局变量,都声明在form1中了,这样在其他单元都方便引用。
      

  8.   

    用你最开始的代码,在FORM2 验证通过后:
    FORM1.F:=true;
    然后再执行一次TForm1.Label1Click(Sender: TObject); 
    就行了!
      

  9.   

    楼上的,你搞笑呀,你不会用FORM2判断调不调吗?如果登录成功就调FORM3,不成功调FORM1或重新登录,搞那么复杂干吗?
      

  10.   

    感觉有些绕!#$%
    除非不得已,不建议使用全局变量,那样以后修改更会搞不清楚在Form1中(主窗体?)打开登录窗体Form2,在Form2中验证用户密码等,根据通过与否确定是否显示Form3。
    建议把调用等流程控制代码都放在同一处,这样要清晰一些参考方法,全部在Form1中控制:1、在Form2中定义一个属性,保存验证状态,如
    FPassed: Boolean;
    property Passed: Boolean read FPassed write FPassed;
    在Form2中如验证通过则
    FPassed := True;2、在Form1中调用
    Form2 := TForm2.Create(Application);
    Form2.Passed := False;
    Form2.ShowModal;
    if Form2.Passed then
      Form3....
    else
      ...;
    Form2.Free; 
      

  11.   

    我感觉可以使用postmessage函数传递调用窗体的信息
      

  12.   

    给你一个我的登录验证:1.修改项目文件,在项目文件中呼叫登录
    program KBS;uses
      Forms,
      Windows,
      MainF in 'MainF.pas' {frmMain},
      SplashF in 'SplashF.pas' {frmSplash},
      mainDM in 'mainDM.pas' {dmMain: TDataModule},
      LoginF in 'LoginF.pas' {frmLogin};{$R *.RES}var
      frmMain: TfrmMain;
      dmMain: TdmMain;
    begin
      Application.Initialize;
      //显示封面
      SplashF.Show;
      try
        //创建需要的资源
        Application.CreateForm(TdmMain, dmMain);
        Application.CreateForm(TfrmMain, frmMain);
        //...其它
      finally
        SplashF.Close;
      end;  if LoginF.Login() then  //呼叫登录
        Application.Run;
    end.2.在登录的LoginF.pas中:
    unit LoginF;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls, StdCtrls, Buttons;type
      TfrmLogin = class(TForm)
        pnl1: TPanel;
        edUserName: TEdit;
        lblUserName: TLabel;
        edPasswd: TEdit;
        lblPasswd: TLabel;
        btnOK: TBitBtn;
        btnCancel: TBitBtn;
        procedure FormCreate(Sender: TObject);
        procedure btnOKClick(Sender: TObject);
      private
        { Private declarations }
        FTryTimes: Integer;
        function CheckUserInfo(AUserName, APassword: string): Boolean;
      public
        { Public declarations }
      end;function Login: Boolean;implementation{$R *.DFM}function Login: Boolean;
    begin
      //动态创建登录窗口
      with TfrmLogin.Create(nil) do
      begin
        //只有返回OK的时候认为登录成功
        Result := ShowModal() = mrOk;
        Free;
      end;
    end;function TfrmLogin.CheckUserInfo(AUserName, APassword: string): Boolean;
    begin
      //简单的验证,可以修改为其它的方式
      Result := (AUserName = 'lihd' ) and (APassword = 'P@ssw0rd');
    end;procedure TfrmLogin.FormCreate(Sender: TObject);
    begin
      //尝试登录的次数,初始化为0
      FTryTimes := 0;
    end;procedure TfrmLogin.btnOKClick(Sender: TObject);
    begin
      Inc(FTryTimes); //尝试登录的次数 + 1
      
      if CheckUserInfo(edUserName.Text, edPasswd.Text) then
      begin
        //如果通过检查,返回OK
        Self.ModalResult := mrOk;
      end else
      begin
        if (FTryTimes > 2) then
        begin
          MessageBox(self.Handle, '你已经尝试登录3次,请联系系统管理员。', '错误', MB_OK + MB_ICONERROR);
          Self.ModalResult := mrCancel;
          Exit;
        end;    //通不过,报错
        MessageBox(self.Handle, '错误的用户名或密码,请重新输入!', '错误', MB_OK + MB_ICONERROR);
        edUserName.SetFocus();
        edUserName.SelectAll();
      end;    
    end;end.