參考網上的一些方法,實作了記住密碼功能,測試效果圖如下:

源碼附上:
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;}
}
}