1. 程式人生 > >轉載 C# WINFORM 記住密碼

轉載 C# WINFORM 記住密碼

uil chang code username 而在 操作 lan box format

背景


Winform實現登錄窗體中記住密碼的功能,模仿QQ登錄記住密碼的實現
如下圖所示,其中標題部分因為項目保密的原因,我加了馬賽克,請大家見諒。
技術分享
用戶名輸入框我們采用下拉列表框ComboBox
密碼框我們采用textBox,並設置為密碼框

設置textBox輸入時不顯示明文,需要將useSystemPasswordChar改為true,然後multiline設置為false,然後重新生成一下就可以了,因為textbox為顯示為密碼字符是當textbox為單行編輯的時候,useSystemPasswordchar的設置才會生效,然後我們還可以通過passwordChar設置textbox中以哪種形式來顯示你輸入的字符,默認是”*”。

實現思路


記住密碼功能的常見實現方法有三種:
方法一:寫入本地數據庫
方法二:寫入文件——txt、xml、ini
方法三:註冊表
我們采用的方式是第二種,其找第二種方式最簡單便捷,因此我們采用這種方式實現,主要思路。我們將用戶的用戶名和密碼已鍵值對等方式存儲在文件中,如果用戶選擇了記住密碼,就將信息寫入文件,而在窗體加載的時候,我們讀取文件中的內容即可。

用戶類操作接口


//要先將User類先設為可以序列化(即在類的前面加[Serializable])
    [Serializable] 
    public class User
    {

        //public User(string username, string password)
        //{
        //    this.userName = username;
        //    this.passWord = password;
        //}

        private string userName;
        public string Username
        {
            get { return userName; }
            set { userName = value; }
        }

        private string passWord;
        public string Password
        {
            get { return passWord; }
            set { passWord = value; }
        }
    }

在窗體加載的時候,讀取文件信息,並且綁定到用戶名comboBox上

private void Login_Load(object sender, EventArgs e)
        {
            //  讀取配置文件尋找記住的用戶名和密碼
            FileStream fs = new FileStream("data.bin", FileMode.OpenOrCreate);

            if (fs.Length > 0)
            {
                BinaryFormatter bf = new BinaryFormatter();
                users = bf.Deserialize(fs) as Dictionary<string, User>;
                foreach (User user in users.Values)
                {
                    this.UserName.Items.Add(user.Username);
                }

                for (int i = 0; i < users.Count; i++)
                {
                    if (this.UserName.Text != "")
                    {
                        if (users.ContainsKey(this.UserName.Text))
                        {
                            this.PassWord.Text = users[this.UserName.Text].Password;
                            this.RemeberPassword.Checked = true;
                        }
                    }
                }
            }
            fs.Close();
            //  用戶名默認選中第一個
            if (this.UserName.Items.Count > 0)
            {
                this.UserName.SelectedIndex = this.UserName.Items.Count - 1;
            }
            //item = (List<User>)bUser.GetAll();
            //item = 
            //this.UserName.DataSource = item;
            //this.UserName.DisplayMember = "Username";
        }

當用戶選擇了用戶名時候,密碼框中顯示對應密碼

 private void UserName_SelectedValueChanged(object sender, EventArgs e)
        {
            //  首先讀取記住密碼的配置文件
            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.UserName.Text != "")
                    {
                        if (users.ContainsKey(UserName.Text) && users[UserName.Text].Password != "")
                        {
                            this.PassWord.Text = users[UserName.Text].Password;
                            this.RemeberPassword.Checked = true;
                        }
                        else
                        {
                            this.PassWord.Text = "";
                            this.RemeberPassword.Checked = false;
                        }
                    }
                }
            }

            fs.Close();
        }

用戶點擊登錄時,記錄密碼或者用戶名信息

 private async void Submit_Click(object sender, EventArgs e)                       //登陸驗證
        {
            string username = this.UserName.Text.Trim();
            string password = this.PassWord.Text.Trim();

            User user = new User();
            FileStream fs = new FileStream("data.bin", FileMode.Create);
            BinaryFormatter bf = new BinaryFormatter();
            user.Username = username;
            if (this.RemeberPassword.Checked)       //  如果單擊了記住密碼的功能
            {   //  在文件中保存密碼
                user.Password = password;
            }
            else
            {   //  不在文件中保存密碼
                user.Password = "";
            }

            //  選在集合中是否存在用戶名 
            if (users.ContainsKey(user.Username))
            {
                users.Remove(user.Username);
            }
            users.Add(user.Username, user);
            //要先將User類先設為可以序列化(即在類的前面加[Serializable])
            bf.Serialize(fs, users);
            //user.Password = this.PassWord.Text;
            fs.Close();

            ///////
            ///////  這裏填寫登錄的處理邏輯代碼
            ///////
        }

轉載 C# WINFORM 記住密碼