using System.Runtime.Serialization.Formatters.Binary;
namespace Test
{
[Serializable]
public class UserInfo
{
public Dictionary<int, string> loginAndPwdDic = new Dictionary<int, string>();//帐号和密码
//public static Dictionary<string, int> userStateDic = new Dictionary<string, int>();//记录登陆状态id和状态值
public int loginId = 0;//帐号
public string userState = "";//状态
public bool isRemerber= false;//是否选择“记住密码“
}
}
(建议登陆帐号用comobox而不用tesxBox,这样可以记录帐号,类似qq)
在登陆窗体的load事件处理程序里:
C# code
UserInfo ui = new UserInfo();//还原的UserInfo对象
private void LoginForm_Load(object sender, EventArgs e)
{
//任务一读取登陆状态加载到登陆框
List<string> stateList = State();(注:state()是从数据库里读取登陆状态的方法)
for (int i = 0; i < stateList.Count; i++)
{
cboState.Items.Add(stateList[i]);
}
//任务二,还原出UserInfo对象
ui = DeoxidizeUserInfo();
if(ui!=null)
{//定量清空
if (ui.loginAndPwdDic.Count > 7)
{
ui.loginAndPwdDic.Clear();
ui.isRemerber = false;
}
}
//任务三:往帐号框时循环加入帐号
foreach (int loignId in ui.loginAndPwdDic.Keys)
{
cbologinId.Items.Add(loignId.ToString());
}
// 任务四:根据上次用户是否选择记住密码执行不同的操作
if (ui!=null && ui.loginAndPwdDic.Count!=0)
{
if (ui.isRemerber == true)//表示记住密码:把QQ号,密码和登陆状态全部填上
{
cbRember.Checked = true;
cbologinId.Text =ui.loginId.ToString();
txtPassword.Text = ui.loginAndPwdDic[ui.loginId];
for (int i = 0; i < stateList.Count; i++)
{ if (stateList[i] == ui.userState)
{
cboState.SelectedIndex = i;
break;
}
}
}
else//表示用户上次没有选择记住密码 ,此时只把登陆状态默认选中为第一项
{
cboState.SelectedIndex = 0;//默认选中为第一项
}
}
}
//还原UserInfo对象
public UserInfo DeoxidizeUserInfo()
{
FileStream fs = new FileStream("userInfo.bin", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
if (fs.Length == 0)
{
fs.Close();
return null;
}
else
{
UserInfo ui = (UserInfo)bf.Deserialize(fs);
fs.Close();
return ui;
}
}
//保存UserInfo对象
public void SaveUserInfo(UserInfo ui)
{
FileStream fs = new FileStream("userInfo.bin", FileMode.OpenOrCreate);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs,ui);
fs.Close();
}
这里提到cboState和cbologinId是什么?我登录界面的帐号输入框是UserCbo,密码框是PassTextBox,记住密码是SaveCheckBox,这三个分别对应上面代码的哪?
namespace Test
{
[Serializable]
public class UserInfo
{
public Dictionary<int, string> loginAndPwdDic = new Dictionary<int, string>();//帐号和密码
//public static Dictionary<string, int> userStateDic = new Dictionary<string, int>();//记录登陆状态id和状态值
public int loginId = 0;//帐号
public string userState = "";//状态
public bool isRemerber= false;//是否选择“记住密码“
}
}
(建议登陆帐号用comobox而不用tesxBox,这样可以记录帐号,类似qq)
在登陆窗体的load事件处理程序里:
C# code
UserInfo ui = new UserInfo();//还原的UserInfo对象
private void LoginForm_Load(object sender, EventArgs e)
{
//任务一读取登陆状态加载到登陆框
List<string> stateList = State();(注:state()是从数据库里读取登陆状态的方法)
for (int i = 0; i < stateList.Count; i++)
{
cboState.Items.Add(stateList[i]);
}
//任务二,还原出UserInfo对象
ui = DeoxidizeUserInfo();
if(ui!=null)
{//定量清空
if (ui.loginAndPwdDic.Count > 7)
{
ui.loginAndPwdDic.Clear();
ui.isRemerber = false;
}
}
//任务三:往帐号框时循环加入帐号
foreach (int loignId in ui.loginAndPwdDic.Keys)
{
cbologinId.Items.Add(loignId.ToString());
}
// 任务四:根据上次用户是否选择记住密码执行不同的操作
if (ui!=null && ui.loginAndPwdDic.Count!=0)
{
if (ui.isRemerber == true)//表示记住密码:把QQ号,密码和登陆状态全部填上
{
cbRember.Checked = true;
cbologinId.Text =ui.loginId.ToString();
txtPassword.Text = ui.loginAndPwdDic[ui.loginId];
for (int i = 0; i < stateList.Count; i++)
{ if (stateList[i] == ui.userState)
{
cboState.SelectedIndex = i;
break;
}
}
}
else//表示用户上次没有选择记住密码 ,此时只把登陆状态默认选中为第一项
{
cboState.SelectedIndex = 0;//默认选中为第一项
}
}
}
//还原UserInfo对象
public UserInfo DeoxidizeUserInfo()
{
FileStream fs = new FileStream("userInfo.bin", FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
if (fs.Length == 0)
{
fs.Close();
return null;
}
else
{
UserInfo ui = (UserInfo)bf.Deserialize(fs);
fs.Close();
return ui;
}
}
//保存UserInfo对象
public void SaveUserInfo(UserInfo ui)
{
FileStream fs = new FileStream("userInfo.bin", FileMode.OpenOrCreate);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs,ui);
fs.Close();
}
这里提到cboState和cbologinId是什么?我登录界面的帐号输入框是UserCbo,密码框是PassTextBox,记住密码是SaveCheckBox,这三个分别对应上面代码的哪?
cbologinId 是登陆ID我登录界面的帐号输入框是UserCbo,密码框是PassTextBox,记住密码是SaveCheckBox,这三个分别对应上面代码的哪?
不知道啥意思
代码里说的很清楚了
else//表示用户上次没有选择记住密码 ,此时只把登陆状态默认选中为第一项
{
cboState.SelectedIndex = 0;//默认选中为第一项
}
这里已经说明cboState是登录状态了
cbologinId是登录账号ID
这里这两个参数类似 QQ的登录框 cbologinId对应QQ号,cboState对应在线还是隐身等其他状态,用于设置打开窗体时的记忆显示
cboLogiID 是用户名下拉列表