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

            ///
            ///  这里填写登录的处理逻辑代码
            ///
        }
;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值