天天看点

C# 登录界面记住密码功能

参考网上的一些方法,实现了记住密码功能,测试效果图如下:

C# 登录界面记住密码功能

源码附上:

public partial class FrmLogin : Form

    {

        private Dictionary<string, User> users =new Dictionary<string,User>();

        public FrmLogin()

        {

            InitializeComponent();

        }

        private void frmLogin_Load(object sender, EventArgs e)

        {

            SaveData();

        }

        private void btnLogin_Click(object sender, EventArgs e)  //点击“登录”事件

        {

            string userName = cmbUser.Text.Trim();  //前后空格不会有影响

            string password = txtPassword.Text.Trim();

            User user = new User();

            FileStream fs = new FileStream("data.bin",FileMode.OpenOrCreate);   //登录时,如果没有data.bin文件就创建,有就打开

            BinaryFormatter bf = new BinaryFormatter();

            if (userName.Equals("adm") && password.Equals("111"))

            {

                user.LoginID = userName;    //将用户名保存在实体类属性中

                if (this.checkBoxRember.Checked)    //如果选择了记住密码功能,就在文件中保存密码

                {

                    user.PassWord = password;

                }

                else

                {

                    user.PassWord = "";

                }

                try

                {

                    if (users.ContainsKey(user.LoginID))

                    {

                        users.Remove(user.LoginID);

                    }

                    users.Add(user.LoginID, user);   //添加用户信息到集合

                    bf.Serialize(fs, users);     //写入文件

                    fs.Close();

                }

                catch (Exception ep)

                {

                    MessageBox.Show(ep.Message);

                }

                this.Hide();

                Form1 form1 = new Form1();

                form1.Show();

            }

            else

            {

                MessageBox.Show("用户或密码错误,请重试!");

            }

        }

        private void butCancel_Click(object sender, EventArgs e)    //点击“取消”事件

        {

            this.Close();

        }

        /// <summary>

        /// 读取配置文件,寻找记住的用户名和密码

        /// </summary>

        private void SaveData()

        {

            FileStream fs = new FileStream("data.bin",FileMode.OpenOrCreate);  //读取文件流对象

            if(fs.Length>0)

            {

                BinaryFormatter bf = new BinaryFormatter();

                users=bf.Deserialize(fs) as Dictionary<string, User>;   //读出存在data.bin里的用户信息

                foreach(User user in users.Values)     //循环添加到cmbUser

                {

                    this.cmbUser.Items.Add(user.LoginID);

                }

                for (int i = 0; i < users.Count;i++ )

                {

                    if(this.cmbUser.Text!="")

                    {

                        if(users.ContainsKey(this.cmbUser.Text))

                        {

                            this.txtPassword.Text = users[this.cmbUser.Text].PassWord;

                            this.checkBoxRember.Checked = true;

                        }

                    }

                }

            }

            fs.Close();

            if(this.cmbUser.Items.Count>0)  //用户名默认选中第一个

            {

                this.cmbUser.SelectedIndex = this.cmbUser.Items.Count - 1;

            }

        }

        private void cmbUser_SelectedValueChanged(object sender,EventArgs e)   //点击ComboBox显示对应的密码

        {

            FileStream fs = new FileStream("data.bin",FileMode.OpenOrCreate);   //首先读取记住密码的配置文件

            if(fs.Length>0)

            {

                BinaryFormatter bf = new BinaryFormatter();

                users=bf.Deserialize(fs) as Dictionary<string,User>;

                for (int i = 0; i < users.Count;i++ )

                {

                    if(this.cmbUser.Text!="")

                    {

                        if (users.ContainsKey(cmbUser.Text) && users[cmbUser.Text].PassWord != "")

                        {

                            this.txtPassword.Text = users[cmbUser.Text].PassWord;

                            this.checkBoxRember.Checked = true;

                        }

                        else

                        {

                            this.txtPassword.Text = "";

                            this.checkBoxRember.Checked = false;

                        }

                    }

                }

            }

            fs.Close();

        }

    }

    [Serializable]  //要先将User类设为可以序列化(即在类的前面加上[Serializable])

    class User

    {

        private string _loginID;

        public string LoginID

        {

            get { return _loginID; }

            set { _loginID = value; }

        }

        private string _passWord;

        public string PassWord

        {

            get { return _passWord; }

            set { _passWord = value;}

        }

    }