轉載 C# WINFORM 記住密碼
阿新 • • 發佈:2017-05-16
uil chang code username 而在 操作 lan box format
轉載自: http://blog.csdn.net/gatieme
背景
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();
///////
/////// 這裏填寫登錄的處理邏輯代碼
///////
}
轉載 C# WINFORM 記住密碼