开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 26722|回复: 43

[源码教程]利用DevExpress的MRUEdit制作简单的仿QQ账号输入框

[复制链接]

0

精华

5291

贡献

6059

赞扬

管理员

帖子
1176
软币
22629
在线时间
4467 小时
注册时间
2013-6-7

黄马甲

发表于 2013-6-19 00:29:46 | 显示全部楼层 |阅读模式
用过QQ的都知道,QQ登录窗口有个下拉菜单可以选择QQ账号,然后在鼠标悬停的QQ帐号后面有个叉叉,可以删除之前保存过的QQ帐号。挺炫的是吧? 我们今天就用DevExpress的一个控件来简单的实现该功能:MRUEdit
MRUEdit 本身就可以在内存中保存输入过的信息,输入一串文字后按回车,就可以在下拉菜单中出现输入过的文字,然后可以通过下拉列表的右侧按钮删除。

但我们需要的以下两个功能它并没有,需要我们通过代码扩展实现。
1.通常我们在提交登录时并不是立即将登录保存下来,而是在通过身份验证后才将合法的用户名和密码保存在本地。
2.如果客户端在本地保存了用户个性化数据,需要在删除下拉列表的时候一并将用户本地文件删除。


我们新建一个解决方案,并创建一个窗体,拖动一个MRUEdit和一个TextEdit到窗体中,MRUEdit作为用户名输入框命名为txtName, TextEdit输入密码用,命名为txtPassword ,再拖入一个按钮和其它几个复选框,如图

0.jpg

OK ,窗体就这么简单,接下来我们就说说刚才我们需要的两个功能实现。
第一个很简单:
MRUEdit有个AddingMRUItem事件,通过这个事件我们可以阻止Item的保存。
  1. private void txtName_AddingMRUItem(object sender, DevExpress.XtraEditors.Controls.AddingMRUItemEventArgs e)
  2. {
  3.         e.Cancel = LockItems;
  4. }
复制代码
说明:
LockItems是个bool类型的变量,如果我们直接将e.Cancel=false,它会在任何时候都会阻止 MRUItem 的添加,所以在这里通过一个变量来让它只在适当的时候工作。
我们先定义一个类,用作保存用户的登录信息。
  1. class Loginfo
  2. {
  3.     public static Loginfo New(string Username, string Password, bool AutoLogin)
  4.     {
  5.           return new Loginfo() { Username = Username, AutoLogin = AutoLogin, Password = Password };
  6.     }
  7.     public string Username { get; set; }
  8.     public string Password { get; set; }
  9.     public bool AutoLogin { get; set; }
  10. }
复制代码
再申明一个LoginArray,用作模拟保存用户登录信息的数据库。
  1. List<Loginfo> LoginArray = new List<Loginfo>();
复制代码
接下来创建一些演示数据
  1. void CreateData()
  2. {
  3.             LoginArray.Add(Loginfo.New("dxper", "", false));
  4.             LoginArray.Add(Loginfo.New("smart", "smart123456", false));
  5.             LoginArray.Add(Loginfo.New("test", "", false));
  6.             LoginArray.Add(Loginfo.New("danny", "danny123456", true));
  7.             LoginArray.Add(Loginfo.New("天堂羽叶", "天堂羽叶123456", false));
  8.             LoginArray.Add(Loginfo.New("神经正常", "神经正常123456", false));
  9. }
复制代码
绑定MRUItem的代码
  1. void BindData()
  2. {
  3.             LockItems = false;
  4.             txtName.Properties.Items.Clear();
  5.      
  6.             for (int i = 0; i < LoginArray.Count; i++)
  7.                       txtName.Properties.Items.Add(LoginArray[i].Username);
  8.             txtName.SelectedIndex = 0;
  9.             LockItems = true;
  10. }
复制代码
F5运行如图
1.jpg

2.jpg
貌似还不错,接下来第二个功能比较头疼了,因为MRUEdit里找不到任何关于Item的事件。
别慌,找不到不代表没有。
如果手动代码你会发现MRUEdit的Properties属性里有个Items.CollectionChanged事件。没错,这就是我们要的东西。
接下来好办了,我们在窗口的LOAD事件里加入以下代码:
  1. private void frmMain_Load(object sender, EventArgs e)
  2. {
  3.             txtName.Properties.Items.CollectionChanged += Items_CollectionChanged;
  4. }
复制代码
  1. void Items_CollectionChanged(object sender, CollectionChangeEventArgs e)
  2. {
  3.             if (e.Action == CollectionChangeAction.Remove)
  4.             {
  5.                 var usn = e.Element.ToString();
  6.                 LoginArray.Remove(GetLoginfo(usn));
  7.                 if (Username.Equals(usn)) Username = "";
  8.                 XtraMessageBox.Show("账户已被删除", "操作成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
  9.             }
  10. }
复制代码
Getloginfo是个根据用户名查找登录信息的类
  1. Loginfo GetLoginfo(string Name)
  2. {
  3.             for (int i = 0; i < LoginArray.Count; i++)
  4.             {
  5.                 if (LoginArray[i].Username == Name)
  6.                     return LoginArray[i];
  7.             }
  8.             return null;
  9. }
复制代码
OK,以上为实现功能的核心代码,很简单吧?

3.jpg

代码简单所以木有注释

更新全部源码下载:(DEV12.2.10)
QQInput.rar (67.96 KB, 下载次数: 72, 售价: 2 贡献)


评分

参与人数 15赞扬 +15 收起 理由
kuizhang08 + 1 很给力
f2wady1234 + 1 赞一个
itmsn160 + 1 赞一个
owen + 1 很给力
lxd824 + 1 Thanks

查看全部评分

回复

使用道具 举报

0

精华

227

贡献

121

赞扬

帖子
24
软币
1434
在线时间
58 小时
注册时间
2013-6-7
发表于 2013-6-19 10:51:37 | 显示全部楼层
很详细的教程啊
回复

使用道具 举报

0

精华

940

贡献

167

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
237
软币
2692
在线时间
264 小时
注册时间
2013-6-17
发表于 2013-6-20 04:40:12 | 显示全部楼层
不错,把我现在的程序的登录窗加上这个功能,啊哈哈
回复

使用道具 举报

0

精华

9

贡献

18

赞扬

帖子
42
软币
327
在线时间
26 小时
注册时间
2013-6-14
发表于 2013-6-20 08:35:04 | 显示全部楼层
功能不错,自己做个例子试试。
回复

使用道具 举报

0

精华

105

贡献

28

赞扬

帖子
73
软币
1055
在线时间
173 小时
注册时间
2013-6-20
发表于 2013-6-20 09:53:49 | 显示全部楼层
详细,赞一个。感谢楼主分享
回复

使用道具 举报

0

精华

447

贡献

6202

赞扬

帖子
332
软币
21882
在线时间
1883 小时
注册时间
2013-6-8

胡吹海聊

发表于 2013-6-27 09:36:28 | 显示全部楼层
这个很不错的一个功能
回复

使用道具 举报

0

精华

2

贡献

1

赞扬

帖子
41
软币
532
在线时间
60 小时
注册时间
2013-6-22
发表于 2013-6-27 18:46:00 | 显示全部楼层
Looks very good, thx
回复

使用道具 举报

0

精华

135

贡献

111

赞扬

管理员

帖子
155
软币
3622
在线时间
419 小时
注册时间
2013-6-7

黄马甲胡吹海聊

发表于 2013-6-27 22:33:49 | 显示全部楼层
很好,努力学习
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
18
软币
208
在线时间
11 小时
注册时间
2013-7-3
发表于 2013-7-4 09:38:04 | 显示全部楼层
恩,不错,很好的东西
回复

使用道具 举报

0

精华

633

贡献

583

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
174
软币
3639
在线时间
377 小时
注册时间
2013-7-5
发表于 2013-7-5 17:55:59 | 显示全部楼层
没有贡献分,下载不了。可惜了咯
回复

使用道具 举报

0

精华

4

贡献

5

赞扬

帖子
60
软币
479
在线时间
45 小时
注册时间
2013-7-28
发表于 2013-7-30 01:04:37 | 显示全部楼层
学习了,谢谢
回复

使用道具 举报

0

精华

1

贡献

0

赞扬

帖子
104
软币
851
在线时间
118 小时
注册时间
2013-7-30
发表于 2013-7-30 12:03:36 | 显示全部楼层
楼主奉献精神 值得一顶啊 必须顶
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
1
软币
61
在线时间
0 小时
注册时间
2013-12-4
发表于 2013-12-8 23:46:45 | 显示全部楼层
支持!!谢谢分享!
回复

使用道具 举报

0

精华

310

贡献

2979

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
126
软币
8038
在线时间
906 小时
注册时间
2013-12-25
发表于 2014-1-10 09:32:19 | 显示全部楼层
又学了一招。
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
1
软币
56
在线时间
0 小时
注册时间
2014-1-10
发表于 2014-1-10 11:02:41 | 显示全部楼层
非常感谢楼主的代码
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
5
软币
91
在线时间
7 小时
注册时间
2014-2-10
发表于 2014-3-29 15:45:53 | 显示全部楼层
很详细。。简约而不简单
回复

使用道具 举报

0

精华

0

贡献

1149

赞扬

帖子
148
软币
3421
在线时间
293 小时
注册时间
2014-4-10
发表于 2014-4-10 15:21:01 | 显示全部楼层
很详细,很不错。赞一个
回复

使用道具 举报

0

精华

-1

贡献

13

赞扬

帖子
113
软币
680
在线时间
100 小时
注册时间
2013-9-24
发表于 2014-4-10 21:30:28 | 显示全部楼层
不错,虽然简单,但是值得学习
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
34
软币
185
在线时间
20 小时
注册时间
2014-3-11
发表于 2014-5-22 22:42:46 | 显示全部楼层
东西不错正好能用上
回复

使用道具 举报

0

精华

0

贡献

7

赞扬

帖子
30
软币
145
在线时间
10 小时
注册时间
2014-6-1
发表于 2014-6-10 12:32:22 | 显示全部楼层
我们不需要自己持久化吗?  试试看
回复

使用道具 举报

0

精华

0

贡献

1

赞扬

帖子
87
软币
752
在线时间
109 小时
注册时间
2013-6-28
发表于 2014-6-17 09:03:37 | 显示全部楼层
怎么下载还要贡献值的?运到
回复

使用道具 举报

0

精华

304

贡献

217

赞扬

帖子
94
软币
1068
在线时间
107 小时
注册时间
2014-9-4
发表于 2014-9-5 10:48:06 | 显示全部楼层
不错,把我现在的程序的登录窗加上这个功能
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
29
软币
179
在线时间
9 小时
注册时间
2014-8-7
发表于 2014-12-19 17:56:58 | 显示全部楼层
获取不到action等于其他的值
只能获取到Refresh
不知道那块设置问题?
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
29
软币
179
在线时间
9 小时
注册时间
2014-8-7
发表于 2014-12-19 17:57:47 | 显示全部楼层
忘了说了 用的是RepositoryItemMRUEdit
用MRUEdit可以获取到
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
56
软币
286
在线时间
25 小时
注册时间
2014-3-12
发表于 2014-12-19 19:51:05 来自手机 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

0

精华

1

贡献

0

赞扬

帖子
10
软币
76
在线时间
2 小时
注册时间
2015-4-7
发表于 2015-4-8 11:25:14 | 显示全部楼层
貌似不是很全
回复

使用道具 举报

0

精华

1204

贡献

97

赞扬

帖子
126
软币
973
在线时间
102 小时
注册时间
2013-8-20
发表于 2015-4-17 14:19:32 | 显示全部楼层
学习了,这个版块好
回复

使用道具 举报

0

精华

4

贡献

12

赞扬

帖子
96
软币
399
在线时间
62 小时
注册时间
2015-4-15
发表于 2015-7-9 12:28:14 | 显示全部楼层
不错,谢谢
可惜下载买不起
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-22 21:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表