C#-WinForm登录窗体实现记住密码的功能(仿QQ实现)

背景

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();

            ///////
            /////// 这里填写登录的处理逻辑代码
            ///////
        }

你可能感兴趣的:(box,记住密码,密码,combo,WinForm,textbox)