本人为一菜鸟,现做一个小程序,程序上第一个窗口是登陆用的,会要求用户名的密码,这些是用数据库来存。现在的问题是我不知道如何在登陆成功后关闭主窗口(也就是登陆用的窗体)。用close来关闭的话,会都关掉,那位高手能帮帮。下面是一部分打开二级窗体和关闭登陆窗体的代码,不对。帮我看看。
            if (guest='admin') and (password=temppassword) then
              begin
                adodataset1.Close;
                Form2.Show;
                Close;  //这一句就会把所有的窗体都关掉。不知怎么搞。

解决方案 »

  1.   

    if WorkLogin then //登录 判断
    begin
      Application.CreateForm(TfrmMain, frmMain);
      Application.Run;
    end
    else
    begin
      Application.Terminate;
    end;我是这样的
      

  2.   

    你的登陆窗体是第一个创建的窗体吧。
    他被设置为主窗体了,主窗体关闭意味着进程结束。
    你只需要在菜单的 Porject->Forms里面,将登陆窗体从主窗体列表中移除就是了,顺便把你的form2设置为主窗体。另外,移除了登陆窗体,就意味着他不会第一个被显示出来(form2会被默认显示出来),你可以在你的工程文件中(.dpr文件)中修改代码,让登陆窗体晚于Form2创建,但是让他先showModle出来,如果登陆失败,直接退出就是了(也就是不让application.Run执行)。
      

  3.   

    你的登录窗口是主窗口所以登录完成了Close就关闭了所有的窗口了,可以改为先创建主窗口,在主窗口显示之前调用登录窗口,登录正确就显示主窗口,否则就退出来.还有另一种方法应该会好点,直接在工程文件里面修改,if TfrmLogin.Execute then
    begin
      Application.Initialize;
      Application.CreateForm(TfrmMain, frmMain);
      Application.Run;
    end;class function TfrmLogin.Execute: boolean;
    begin
      with TfrmLogin.Create(nil) do
      try
        Result := ShowModal = mrOk;
      finally
        Free;
      end;
    end;
      

  4.   


    不同的用户对应不同的操作界面,这个就是权限的问题吧A用户,比如只能操作X1界面,那就这用户 登录后只能打开一个X1界面,其他界面不要让他操作就行了
    B用户,比如只能操作X2界面,那就这用户 登录后只能打开一个X2界面,其他界面不要让他操作就行了
      

  5.   

    最简单的方法,在进入主界面后不要close登录窗体,只把visual:=false,主窗体关闭时调用Application.Terminate;
      

  6.   

    不同的用户对应不同的操作界面,这个就是权限的问题吧 A用户,比如只能操作X1界面,那就这用户 登录后只能打开一个X1界面,其他界面不要让他操作就行了 
    B用户,比如只能操作X2界面,那就这用户 登录后只能打开一个X2界面,其他界面不要让他操作就行了-------------------------------------------------------------------------------这个问题是这样的,主的操作窗体功能都差不多,管理员用户进去后功能是全是,而一般用户进去,只是有两三个功能不可以用。其它都是一样的,比如只能查询销售额,而不能查询利润。只能查询卖出价,但不能查询成本价。主要就是在这些地方。所以一开始,我设想的是,两个不同功能的操作窗体。通过用户登陆来分别启用。并且操作窗体里面也还有其它窗体。
      

  7.   

    如果你要以登陆窗口作为主窗体,那么你调用Hide就是了,不要调用Close,主窗体Close会导致程序结束
    在.dpk文件中
    var
      frmLogin: TFrmLogin;
      frmMain: TForm;
      frmMainClass: TFormClass;
    begin
      Application.Initialize;
      frmMain := nil;
      frmLogin := TFrmLogin.Create(nil);
      try
        if frmLogin.ShowModal then
        begin
          case frmLogin.formCase of
            0: begin frmMain := Form0; frmMainClass := TForm0; end;
            1: begin frmMain := Form1; frmMainClass := TForm1; end;
            2: begin frmMain := Form2; frmMainClass := TForm2; end;
            ......
          else
            begin
              frmMain := frmAbout;
              frmMainClass := TfrmAbout;
            end;
          end;
      finally
        frmLogin.Free;
      end;
      if frmMain <> nil then
      begin
        Application.CreateForm(frmMainClass, frmMain);
        Application.Run;
      end;
    end;
      

  8.   

    感谢各位的帮助 ,上面很多代码我都看不太懂,不过我已经采用了beifangke的简单方法,还是很有用,马上给分,大家都有份。