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,这三个分别对应上面代码的哪?

解决方案 »

  1.   

    cboState 是登陆状态
    cbologinId 是登陆ID我登录界面的帐号输入框是UserCbo,密码框是PassTextBox,记住密码是SaveCheckBox,这三个分别对应上面代码的哪?
    不知道啥意思
      

  2.   


    代码里说的很清楚了
    else//表示用户上次没有选择记住密码 ,此时只把登陆状态默认选中为第一项
                    {
                        cboState.SelectedIndex = 0;//默认选中为第一项
                    }
    这里已经说明cboState是登录状态了
    cbologinId是登录账号ID
    这里这两个参数类似 QQ的登录框 cbologinId对应QQ号,cboState对应在线还是隐身等其他状态,用于设置打开窗体时的记忆显示
      

  3.   

    cboState是用户状态下拉列表
    cboLogiID 是用户名下拉列表