参考网上的一些方法,实现了记住密码功能,测试效果图如下:
源码附上:
public partial class FrmLogin : Form
{
private Dictionary<string, User> users =new Dictionary<string,User>();
public FrmLogin()
{
InitializeComponent();
}
private void frmLogin_Load(object sender, EventArgs e)
{
SaveData();
}
private void btnLogin_Click(object sender, EventArgs e) //点击“登录”事件
{
string userName = cmbUser.Text.Trim(); //前后空格不会有影响
string password = txtPassword.Text.Trim();
User user = new User();
FileStream fs = new FileStream("data.bin",FileMode.OpenOrCreate); //登录时,如果没有data.bin文件就创建,有就打开
BinaryFormatter bf = new BinaryFormatter();
if (userName.Equals("adm") && password.Equals("111"))
{
user.LoginID = userName; //将用户名保存在实体类属性中
if (this.checkBoxRember.Checked) //如果选择了记住密码功能,就在文件中保存密码
{
user.PassWord = password;
}
else
{
user.PassWord = "";
}
try
{
if (users.ContainsKey(user.LoginID))
{
users.Remove(user.LoginID);
}
users.Add(user.LoginID, user); //添加用户信息到集合
bf.Serialize(fs, users); //写入文件
fs.Close();
}
catch (Exception ep)
{
MessageBox.Show(ep.Message);
}
this.Hide();
Form1 form1 = new Form1();
form1.Show();
}
else
{
MessageBox.Show("用户或密码错误,请重试!");
}
}
private void butCancel_Click(object sender, EventArgs e) //点击“取消”事件
{
this.Close();
}
/// <summary>
/// 读取配置文件,寻找记住的用户名和密码
/// </summary>
private void SaveData()
{
FileStream fs = new FileStream("data.bin",FileMode.OpenOrCreate); //读取文件流对象
if(fs.Length>0)
{
BinaryFormatter bf = new BinaryFormatter();
users=bf.Deserialize(fs) as Dictionary<string, User>; //读出存在data.bin里的用户信息
foreach(User user in users.Values) //循环添加到cmbUser
{
this.cmbUser.Items.Add(user.LoginID);
}
for (int i = 0; i < users.Count;i++ )
{
if(this.cmbUser.Text!="")
{
if(users.ContainsKey(this.cmbUser.Text))
{
this.txtPassword.Text = users[this.cmbUser.Text].PassWord;
this.checkBoxRember.Checked = true;
}
}
}
}
fs.Close();
if(this.cmbUser.Items.Count>0) //用户名默认选中第一个
{
this.cmbUser.SelectedIndex = this.cmbUser.Items.Count - 1;
}
}
private void cmbUser_SelectedValueChanged(object sender,EventArgs e) //点击ComboBox显示对应的密码
{
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.cmbUser.Text!="")
{
if (users.ContainsKey(cmbUser.Text) && users[cmbUser.Text].PassWord != "")
{
this.txtPassword.Text = users[cmbUser.Text].PassWord;
this.checkBoxRember.Checked = true;
}
else
{
this.txtPassword.Text = "";
this.checkBoxRember.Checked = false;
}
}
}
}
fs.Close();
}
}
[Serializable] //要先将User类设为可以序列化(即在类的前面加上[Serializable])
class User
{
private string _loginID;
public string LoginID
{
get { return _loginID; }
set { _loginID = value; }
}
private string _passWord;
public string PassWord
{
get { return _passWord; }
set { _passWord = value;}
}
}