- 积分
- 6059
- 在线时间
- 4467 小时
- 主题
- 281
- 注册时间
- 2013-6-7
- 帖子
- 1176
- 最后登录
- 2024-12-21
管理员
- 帖子
- 1176
- 软币
- 22629
- 在线时间
- 4467 小时
- 注册时间
- 2013-6-7
|
用过QQ的都知道,QQ登录窗口有个下拉菜单可以选择QQ账号,然后在鼠标悬停的QQ帐号后面有个叉叉,可以删除之前保存过的QQ帐号。挺炫的是吧? 我们今天就用DevExpress的一个控件来简单的实现该功能:MRUEdit
MRUEdit 本身就可以在内存中保存输入过的信息,输入一串文字后按回车,就可以在下拉菜单中出现输入过的文字,然后可以通过下拉列表的右侧按钮删除。
但我们需要的以下两个功能它并没有,需要我们通过代码扩展实现。
1.通常我们在提交登录时并不是立即将登录保存下来,而是在通过身份验证后才将合法的用户名和密码保存在本地。
2.如果客户端在本地保存了用户个性化数据,需要在删除下拉列表的时候一并将用户本地文件删除。
我们新建一个解决方案,并创建一个窗体,拖动一个MRUEdit和一个TextEdit到窗体中,MRUEdit作为用户名输入框命名为txtName, TextEdit输入密码用,命名为txtPassword ,再拖入一个按钮和其它几个复选框,如图
OK ,窗体就这么简单,接下来我们就说说刚才我们需要的两个功能实现。
第一个很简单:
MRUEdit有个AddingMRUItem事件,通过这个事件我们可以阻止Item的保存。- private void txtName_AddingMRUItem(object sender, DevExpress.XtraEditors.Controls.AddingMRUItemEventArgs e)
- {
- e.Cancel = LockItems;
- }
复制代码 说明:
LockItems是个bool类型的变量,如果我们直接将e.Cancel=false,它会在任何时候都会阻止 MRUItem 的添加,所以在这里通过一个变量来让它只在适当的时候工作。
我们先定义一个类,用作保存用户的登录信息。- class Loginfo
- {
- public static Loginfo New(string Username, string Password, bool AutoLogin)
- {
- return new Loginfo() { Username = Username, AutoLogin = AutoLogin, Password = Password };
- }
- public string Username { get; set; }
- public string Password { get; set; }
- public bool AutoLogin { get; set; }
- }
复制代码 再申明一个LoginArray,用作模拟保存用户登录信息的数据库。- List<Loginfo> LoginArray = new List<Loginfo>();
复制代码 接下来创建一些演示数据- void CreateData()
- {
- LoginArray.Add(Loginfo.New("dxper", "", false));
- LoginArray.Add(Loginfo.New("smart", "smart123456", false));
- LoginArray.Add(Loginfo.New("test", "", false));
- LoginArray.Add(Loginfo.New("danny", "danny123456", true));
- LoginArray.Add(Loginfo.New("天堂羽叶", "天堂羽叶123456", false));
- LoginArray.Add(Loginfo.New("神经正常", "神经正常123456", false));
- }
复制代码 绑定MRUItem的代码- void BindData()
- {
- LockItems = false;
- txtName.Properties.Items.Clear();
-
- for (int i = 0; i < LoginArray.Count; i++)
- txtName.Properties.Items.Add(LoginArray[i].Username);
- txtName.SelectedIndex = 0;
- LockItems = true;
- }
复制代码 F5运行如图
貌似还不错,接下来第二个功能比较头疼了,因为MRUEdit里找不到任何关于Item的事件。
别慌,找不到不代表没有。
如果手动代码你会发现MRUEdit的Properties属性里有个Items.CollectionChanged事件。没错,这就是我们要的东西。
接下来好办了,我们在窗口的LOAD事件里加入以下代码:- private void frmMain_Load(object sender, EventArgs e)
- {
- txtName.Properties.Items.CollectionChanged += Items_CollectionChanged;
- }
复制代码- void Items_CollectionChanged(object sender, CollectionChangeEventArgs e)
- {
- if (e.Action == CollectionChangeAction.Remove)
- {
- var usn = e.Element.ToString();
- LoginArray.Remove(GetLoginfo(usn));
- if (Username.Equals(usn)) Username = "";
- XtraMessageBox.Show("账户已被删除", "操作成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
- }
复制代码 Getloginfo是个根据用户名查找登录信息的类- Loginfo GetLoginfo(string Name)
- {
- for (int i = 0; i < LoginArray.Count; i++)
- {
- if (LoginArray[i].Username == Name)
- return LoginArray[i];
- }
- return null;
- }
复制代码 OK,以上为实现功能的核心代码,很简单吧?
代码简单所以木有注释
更新全部源码下载:(DEV12.2.10)
QQInput.rar
(67.96 KB, 下载次数: 72, 售价: 2 贡献)
|
评分
-
查看全部评分
|