日期:2014-05-18  浏览次数:20805 次

自动登录有点毛病。大将帮忙来看看~
流程是这样的:(选择自动登录)登录窗体load,验证储存帐号密码的文件是否存在,若存在,提取帐号密码,并进行验证,成功后,进入主窗体,登录窗体隐藏。可是登录成功红,登录窗体并不隐藏。
下面为代码:
C# code

private const String BIN_FILE_NAME = "Profile.dat";

        //窗体加载
        private void FrmLogin_Load(object sender, EventArgs e)
        {
            //判断是否曾经保存过密码
            // 首先判断,文件是否已经存在
            if (File.Exists(BIN_FILE_NAME))
            {
                // 如果文件已经存在,那么读取,并解密
                string ProfileStr = DESEncrypt.DecryptString(TestRead());
                //获取信息
                //帐号
                string name = ProfileStr.Substring(0, ProfileStr.IndexOf("?"));
                ProfileStr = ProfileStr.Substring(ProfileStr.IndexOf("?")+1);
                //密码
                string pwd = ProfileStr.Substring(0, ProfileStr.IndexOf("?"));
                ProfileStr = ProfileStr.Substring(ProfileStr.IndexOf("?") + 1);
                //记住密码
                int AutoLogin = int.Parse(ProfileStr.Substring(0));
                //处理
                txt_AdminName.Text = name;
                txt_AdminPwd.Text = pwd;
                //判断是否记住登录
                if (AutoLogin == 0)
                {
                    ckb_Rememb.Checked = true;
                }
                else
                {
                    //若不记住密码。则证明不自动登录
                    Login(false);
                }
            }
        }

        //登录按钮被点击,证明不是自动登录
        private void btn_Login_Click(object sender, EventArgs e)
        {
            //传参,准备对保存密码的文件进行操作
            Login(true);
        }

        private void Login(bool first)
        {
            //验证帐号密码是否正确
            if (DBHelper.AdminLogin(txt_AdminName.Text, txt_AdminPwd.Text).Length > 0)
            {
                UserHelper.DefaultPath = DBHelper.AdminLogin(txt_AdminName.Text, txt_AdminPwd.Text);//无视这里,顺便获取照片的默认储存路径而已
                //保存帐号密码
                UserHelper.name = txt_AdminName.Text;
                UserHelper.pwd = txt_AdminPwd.Text;
                //记住密码
                if (first)
                SaveProfile();//处理帐号密码保存文件
                FrmMain fm = new FrmMain();//实例化窗体
                fm.Show();//窗体显示
                this.Visible = false;//登录窗体隐藏
            }
            else
            {
                MessageBox.Show("用户名或密码错误", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txt_AdminPwd.Clear();
            }
        }
        private void SaveProfile()
        {
            //判断是否选择记住密码(帐号?密码?0/1)
            if (ckb_Rememb.Checked == true)
            {
                string Profile = txt_AdminName.Text + "?" + txt_AdminPwd.Text;
                //判断是否选择自动登录(0不自动、1自动)
                if (ckb_AutoLogin.Checked == true)
                {
                    Profile += "?1";
                }
                else
                {
                    Profile += "?0";
                }
                //加密
                string Encrypt = DESEncrypt.EncryptString(Profile);
                //写入二进制文件
                TestWrite(Encrypt);
            }
            else
            {
                //取消记住密码,自动登录功能,则删除用户信息文件
                if (File.Exists(BIN_FILE_NAME))
                {
                    // 如果文件已经存在,那么删除掉.
                    File.Delete(BIN_FILE_NAME);
                }
            }
        }



代码执行后登录窗体依旧可见,我调试过,隐藏代码执行,但不隐藏。
各位大哥大姐们。帮帮忙。在线等,谢了。

------解决方案--------------------
像登录窗体这样的,推荐做法是,在 Program Main 方法里,先 Show 登录窗体,根据登录信息设置窗体返回值,如果允许登录,再 Application.Run(主窗体) 。