您的位置:首页 > 编程语言 > C#

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

2016-12-06 16:11 866 查看
       

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

///////
///////  这里填写登录的处理逻辑代码
///////
}
;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: