天天看點

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;}

        }

    }