在网上看了一段代码 没能全明白 求解高人~~~
以下是网上找的代码先定义user类:using System;using System.Collections.Generic;using System.Text;[Serializable]public class User{ private string loginID = string.Empty; public string LoginID { get { return loginID; } set { loginID = value; } } private string pwd = string.Empty; public string Pwd { get { return pwd; } set { pwd = value; } }}(下面页面开始位置定义 到底要在哪定义啊希望高人能详细点说明)
页面开始位置定义:Dictionary<string, User> users = new Dictionary<string, User>(); User user = new User();注:会员输入框用combox下拉框在登录成功事件写:
(这个是不是在密码验证成功后写在新窗体new之前 还有filestream我写不出来 是不是要引用哪个空间)
FileStream fs = new FileStream("data.bin", FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); user.LoginID = cbologinId.Text.Trim(); if (cbRember.Checked) { user.Pwd = txt_userPwd.Text.Trim(); } else { user.Pwd = ""; } if (users.ContainsKey(user.LoginID)) { users.Remove(user.LoginID); } users.Add(user.LoginID, user); bf.Serialize(fs, users); fs.Close();页面加载的时候: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) { cbologinId.Items.Add(user.LoginID); } for (int i = 0; i < users.Count; i++) { if (cbologinId.Text.Trim() != "") { if (users.ContainsKey(cbologinId.Text.Trim())) { txt_userPwd.Text = users[cbologinId.Text].Pwd; cbRember.Checked = true; } } } } fs.Close();combox用户列表选择事件: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 (cbologinId.Text.Trim() != "") { if (users.ContainsKey(cbologinId.Text.Trim()) && users[cbologinId.Text].Pwd != "") { txt_userPwd.Text = users[cbologinId.Text].Pwd; cbRember.Checked = true; } else { txt_userPwd.Text = ""; cbRember.Checked = false; } } } } fs.Close();
希望能大致的流程略详细的讲一遍 谢谢诶
以下是网上找的代码先定义user类:using System;using System.Collections.Generic;using System.Text;[Serializable]public class User{ private string loginID = string.Empty; public string LoginID { get { return loginID; } set { loginID = value; } } private string pwd = string.Empty; public string Pwd { get { return pwd; } set { pwd = value; } }}(下面页面开始位置定义 到底要在哪定义啊希望高人能详细点说明)
页面开始位置定义:Dictionary<string, User> users = new Dictionary<string, User>(); User user = new User();注:会员输入框用combox下拉框在登录成功事件写:
(这个是不是在密码验证成功后写在新窗体new之前 还有filestream我写不出来 是不是要引用哪个空间)
FileStream fs = new FileStream("data.bin", FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); user.LoginID = cbologinId.Text.Trim(); if (cbRember.Checked) { user.Pwd = txt_userPwd.Text.Trim(); } else { user.Pwd = ""; } if (users.ContainsKey(user.LoginID)) { users.Remove(user.LoginID); } users.Add(user.LoginID, user); bf.Serialize(fs, users); fs.Close();页面加载的时候: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) { cbologinId.Items.Add(user.LoginID); } for (int i = 0; i < users.Count; i++) { if (cbologinId.Text.Trim() != "") { if (users.ContainsKey(cbologinId.Text.Trim())) { txt_userPwd.Text = users[cbologinId.Text].Pwd; cbRember.Checked = true; } } } } fs.Close();combox用户列表选择事件: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 (cbologinId.Text.Trim() != "") { if (users.ContainsKey(cbologinId.Text.Trim()) && users[cbologinId.Text].Pwd != "") { txt_userPwd.Text = users[cbologinId.Text].Pwd; cbRember.Checked = true; } else { txt_userPwd.Text = ""; cbRember.Checked = false; } } } } fs.Close();
希望能大致的流程略详细的讲一遍 谢谢诶
解决方案 »
- EF错误请教:指定的架构无效。错误: CLR 类型到 EDM 类型的映射不明确
- winform调用activeX控件 ???
- 想请教下各路高手对于内码转换的方法
- 关于C#连MSSQL,事件操作的问题!
- dataGrid 问题 点击dataGrid的每一行.在相应的textbox中数据显示行中字段
- 从xml web service返回的DataSet数据如何显示在flash的DataGrid里?
- 求助:VS2008远程调试“出现了特定的安全程序包错误”
- QQ里面输入信息那个文本框,它改变颜色是用GDI+描绘上去的吗?还是怎样?来说说原理
- 大家帮个忙,如何是好?可以给一些源程序。
- 高分提问!!!
- 两个列表或者序列相加,即是在原有的列表添加一条序列
- C#如何从DataGridView控件数据,转成获取DataTable。
1.user类里面存放了用户的用户名和密码的属性,通过对字段封装来实现用户名和密码的构造,并且把用户的信息写入序列化Serializable;
2.Dictionary<string, User> users = new Dictionary<string, User>();User user = new User();这些应该是放在对use类进行操作的页面的,这里用了字典集合将用户信息进行操作,去查下Dictionary字典集合的使用方法;
3.filestream引入的命名空间是using System.IO; 这个是对文件流进行操作的命名空间;FileStream fs = new FileStream("data.bin", FileMode.Create);这里是将序列化的信息写入到data.bin文件中了。这里你需要去看下关于序列化方面的知识了。http://wenku.baidu.com/view/b1b470620b1c59eef8c7b49e.html
下面的知识我也不是很熟悉了,请高手继续解答。
下次启动的时候读进来 最好要加密
比如说密码 123456
MD5加密 SD45SGFETS45
这样 别人就看不懂了
http://topic.csdn.net/u/20110113/15/b4f9b05c-3a82-4651-ab8f-921e56792a67.html
[Serializable]之上还有加一个加密解密层,最好用不对称的.
没看代码没看回复 看标题来着以下几个步骤:1.配置文件里设定某个值是否保存了密码
2.找个地方存放用户的密码,随便你用TXT还是用什么的!
3.程序运行的时候检查配置文件,如果是读取你已经存放好的密码,如果非,输密码的地方就留空!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace demo
{
public partial class Form1 : Form
{
Dictionary<string, User> users = new Dictionary<string, User>();
User user = new User();
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
if (cbologinId.Text == "qq" && txtPassword.Text == "qq")
{
FileStream fs = new FileStream("data.bin", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
User u = new User();
u.LoginID = cbologinId.Text.Trim();
if (CkbKeepPassword.Checked)
{
u.Pwd = txtPassword.Text.Trim();
}
else
{
u.Pwd = "";
}
if (users.ContainsKey(user.LoginID))
{
users.Remove(user.LoginID);
}
users.Add(user.LoginID, user);
bf.Serialize(fs, users);
fs.Close();
MainForm mf = new MainForm();
mf.Show();
this.Hide();
}
} private void Form1_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)
{
cbologinId.Items.Add(user.LoginID);
}
for (int i = 0; i < users.Count; i++)
{
if (cbologinId.Text.Trim() != "")
{
if (users.ContainsKey(cbologinId.Text.Trim()))
{
txtPassword.Text = users[cbologinId.Text].Pwd;
CkbKeepPassword.Checked = true;
}
}
}
}
fs.Close();
} private void cbologinId_SelectedIndexChanged(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 (cbologinId.Text.Trim() != "")
{
if (users.ContainsKey(cbologinId.Text.Trim()) && users[cbologinId.Text].Pwd != "")
{
txtPassword.Text = users[cbologinId.Text].Pwd;
CkbKeepPassword.Checked = true;
}
else
{
txtPassword.Text = "";
CkbKeepPassword.Checked = false;
}
}
}
}
fs.Close();
} private void cbologinId_SelectionChangeCommitted(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 (cbologinId.Text.Trim() != "")
{
if (users.ContainsKey(cbologinId.Text.Trim()) && users[cbologinId.Text].Pwd != "")
{
txtPassword.Text = users[cbologinId.Text].Pwd;
CkbKeepPassword.Checked = true;
}
else
{
txtPassword.Text = "";
CkbKeepPassword.Checked = false;
}
}
}
}
fs.Close();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace demo
{
[Serializable]
public class User
{
private string loginID = string.Empty;
public string LoginID
{
get { return loginID; }
set { loginID = value; }
}
private string pwd = string.Empty;
public string Pwd
{
get { return pwd; }
set { pwd = value; }
}
}
}
RegistryKey rsg = null;
if (null == Registry.CurrentUser.OpenSubKey("Software\\Mistone-xzh")) {
Registry.CurrentUser.CreateSubKey("Software\\Mistone-xzh");
} if (null == Registry.CurrentUser.OpenSubKey("Software\\Mistone-xzh\\LoginInfo")) {
Registry.CurrentUser.CreateSubKey("Software\\Mistone-xzh\\LoginInfo");
} rsg = Registry.CurrentUser.OpenSubKey("Software\\Mistone-xzh\\LoginInfo", true);
rsg.SetValue("LoginName", "abc");
rsg.SetValue("LoginPassword", "123");//最好将密码进行加密
登录窗体Load时,从注册表中获取信息:
RegistryKey rsg = Registry.CurrentUser.OpenSubKey("Software\\Mistone-xzh\\LoginInfo");
string loginName = rsg.GetValue("LoginName").ToString();
string pwd = rsg.GetValue("LoginPassword").ToString();
大概思路就是这样。
仔细看看你的代码
User u = new User();
u.LoginID = cbologinId.Text.Trim();
if (CkbKeepPassword.Checked)
{
u.Pwd = txtPassword.Text.Trim();
}
else
{
u.Pwd = "";
}
if (users.ContainsKey(user.LoginID))
{
users.Remove(user.LoginID);
}
users.Add(user.LoginID, user);你这地方又声明了一个新的User 对象 u,帐号密码都赋值给了u对象,而你存储的确实user对象,所以肯定不行呀
我那不是把User 实例化了么?不然怎么调用Pwd 那些呢?
你这样存的是你的u对象吗?
User user = new User();你存的是全局的user对象,他没有被赋值
User user = new User(); private void button1_Click(object sender, EventArgs e)
{
if (cbologinId.Text == "qq" && txtPassword.Text == "qq")
{ FileStream fs = new FileStream("data.bin", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
//User u = new User();
user.LoginID = cbologinId.Text.Trim();
if (CkbKeepPassword.Checked)
{
user.Pwd = txtPassword.Text.Trim();
}
else
{
user.Pwd = "";
}
if (users.ContainsKey(user.LoginID))
{
users.Remove(user.LoginID);
}
users.Add(user.LoginID, user);
bf.Serialize(fs, users);
fs.Close();
MainForm mf = new MainForm();
mf.Show();
this.Hide();
}
} private void Form1_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)
{
cbologinId.Items.Add(user.LoginID);
}
for (int i = 0; i < users.Count; i++)
{
if (cbologinId.Text.Trim() != "")
{
if (users.ContainsKey(cbologinId.Text.Trim()))
{
txtPassword.Text = users[cbologinId.Text].Pwd;
CkbKeepPassword.Checked = true;
}
}
}
}
fs.Close();
} private void cbologinId_SelectedIndexChanged(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 (cbologinId.Text.Trim() != "")
{
if (users.ContainsKey(cbologinId.Text.Trim()) && users[cbologinId.Text].Pwd != "")
{
txtPassword.Text = users[cbologinId.Text].Pwd;
CkbKeepPassword.Checked = true;
}
else
{
txtPassword.Text = "";
CkbKeepPassword.Checked = false;
}
}
}
}
fs.Close();
} private void cbologinId_SelectionChangeCommitted(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 (cbologinId.Text.Trim() != "")
{
if (users.ContainsKey(cbologinId.Text.Trim()) && users[cbologinId.Text].Pwd != "")
{
txtPassword.Text = users[cbologinId.Text].Pwd;
CkbKeepPassword.Checked = true;
}
else
{
txtPassword.Text = "";
CkbKeepPassword.Checked = false;
}
}
}
}
fs.Close();
}
这样再试试