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; }        }    }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

在窗体加载的时候,读取文件信息,并且绑定到用户名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";        }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

当用户选择了用户名时候,密码框中显示对应密码

 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();        }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

用户点击登录时,记录密码或者用户名信息

 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();            ///////            ///////  这里填写登录的处理逻辑代码            ///////        }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
           

猜你喜欢

转载自blog.csdn.net/qq_44925149/article/details/89787262
今日推荐