WPF中实现登陆窗口的“记住帐号”功能

1、在Login.xaml中添加资源:

<XmlDataProvider x:Key="XmlDataProvider" Source="pack://application:,,,/5yue.PMS;Component/Config/SysConfig.xml" XPath="SysConfig"/>

2、使用ComboBox实现帐号输入:

<ComboBox x:Name="UserName" Width="160" Height="26" FontSize="14" IsEditable="True" Grid.Row="1" Grid.Column="1"
ItemsSource="{Binding Source={StaticResource XmlDataProvider}, XPath=SavedLoginNames/LoginName}" BorderThickness ="1" SelectedIndex="0"/>
<CheckBox x:Name="ckSaveName" FontSize="12px" Grid.Row="1" Grid.Column="2" HorizontalAlignment="Right" Margin="0,0,22,0" Padding="2 0 " Foreground="#88052742">记住我</CheckBox>

3、后台逻辑,在提交验证成功后添加保存帐号的步骤即可:

        /// <summary>
        /// 保存账号(异步执行)
        /// </summary>
        /// <param name="loginName"></param>
        private async void SaveLoginName(string loginName)
        {
            await Task.Delay(1);
            if(this.ckSaveName.IsChecked != true) return;
            try
            {
                string filePath = Utils.GetMapPath("")+@"Config\SysConfig.xml";
                XmlDocument doc = XmlHelper.GetXMLDoc(filePath);
                if (doc != null)
                {
                    XmlNode rootNode = doc.SelectSingleNode("SysConfig");
                    List<string> nameList = XmlHelper.GetNodesToList(rootNode, "SavedLoginNames");
                    if (nameList != null && !nameList.Contains(loginName))// 如果账号仍未保存
                    {
                        XmlNode namesNode = rootNode.SelectSingleNode("SavedLoginNames");// 获取SavedLoginNames节点信息
                        XmlNode childNode = doc.CreateElement("LoginName");// 创建新的SavedLoginName节点
                        childNode.InnerText = loginName;// 节点内容值为loginName参数
                        namesNode.PrependChild(childNode);// 插入到最前

                        int maxCount = Utils.StrToInt(CacheProvider.GetSysConfig("SavedLoginNameCount"), 5);
                        namesNode = XmlHelper.HandleNodeUnderMaxCount(namesNode, maxCount);// 处理保存账号的最大数量大于config表中配置的数量
                        doc.Save(filePath);// 保存
                    }
                    else if (nameList != null && nameList.Contains(loginName))// 如果账号已保存, 将其提到最前。
                    {
                        if (nameList.Count == 1) return;
                        XmlNode namesNode = rootNode.SelectSingleNode("SavedLoginNames");
                        XmlNodeList childNodes = namesNode.ChildNodes;
                        foreach (XmlNode item in childNodes)
                        {
                            if (loginName.Equals(item.InnerText))
                            {
                                XmlNode newNode = item;
                                namesNode.RemoveChild(item);
                                namesNode.PrependChild(newNode);
                                break;
                            }
                        }
                        doc.Save(filePath);// 保存
                    }
                    //else if(nameList == null) return "failed,读取配置失败!";
                }
                //return (int)Message.SUCCESS;
            }
            catch (Exception ex)
            {
                //return ex.ToString();
            }
        }

4、项目根目录/Config下添加SysConfig.xml保存用户名

<?xml version="1.0" encoding="UTF-8"?>
<SysConfig>
  <SavedLoginNames><!-- 保存的登录账号 -->
    <LoginName>admin</LoginName>
    <LoginName>111</LoginName>
    <LoginName>555</LoginName>
    <LoginName>22</LoginName>
    <LoginName>444</LoginName>
  </SavedLoginNames>
</SysConfig>

效果如图:

时间: 2024-10-05 05:10:35

WPF中实现登陆窗口的“记住帐号”功能的相关文章

C# 在winform或者wpf中显示控制台窗口

这儿需要使用两个系统函数: BOOL WINAPI FreeConsole(void); //// 关闭控制台窗口,参考:http://msdn.microsoft.com/en-us/library/ms683150%28VS.85%29.aspx BOOL WINAPI AllocConsole(void); //// 打开控制台窗口,参考:http://msdn.microsoft.com/en-us/library/ms681944%28VS.85%29.aspx对应DLL:Kernel

如何监视 WPF 中的所有窗口,在所有窗口中订阅事件或者附加 UI

原文:如何监视 WPF 中的所有窗口,在所有窗口中订阅事件或者附加 UI 由于 WPF 路由事件(主要是隧道和冒泡)的存在,我们很容易能够通过只监听窗口中的某些事件使得整个窗口中所有控件发生的事件都被监听到.然而,如果我们希望监听的是整个应用程序中所有的事件呢?路由事件的路由可并不会跨越窗口边界呀? 本文将介绍我编写的应用程序窗口监视器,来监听整个应用程序中所有窗口中的路由事件.这样的方法可以用来无时无刻监视 WPF 程序的各种状态. 其实问题依旧摆在那里,因为我们依然无法让路由事件跨越窗口边界

登陆页面实现保存帐号密码功能

通过Cookie实现"记住我"的功能 1.登陆页面如下: 每个字段对应的属性name如下表: 用户帐号 name 登陆密码 password 验证码 checkNum 记住我 rememberMe 2.Action中的处理如下: 在用户第一次登陆后,进行Cookie进行处理 登陆处理: /**登陆*/ public String login() throws Exception{ //处理验证码:判断验证码输入的是否正确 boolean flag=VerificationCodeUti

Android(安卓)手机登陆Exchange 2013邮箱帐号的配置

Android(安卓)手机登陆Exchange 2013邮箱帐号的配置 本博文介绍Android(安卓)手机配置Exchange 2013邮箱帐号,由于Android手机种类和固件版本太多,这里介绍比较通用的三星S5830的配置,请看步骤: 1.直接在应用程序中选择“电子邮件”,然后进入“设置电子邮件”界面如下, 输入邮箱地址和密码,点击“下一步”, 2.选择POP3帐户或IMAP(当然,选择这两种类型的提前是Exchange服务器已经启用了POP3或IMAP的服务), 3.在接收服务器设置界面

iphone(苹果)手机登陆Exchange 2013邮箱帐号的配置

iphone(苹果)手机登陆Exchange 2013邮箱帐号的配置 本博文介绍iphone(苹果)手机配置Exchange 2013邮箱帐号,直接看步骤: 1.打开iphone手机的“设置”界面如下,点击“邮件.通讯录.日历”选项: 2.点击“添加帐户”, 3.选择添加“Exchange”帐户, 4.输入Exchange 邮箱地址和密码,点击“下一步”, 5.输入Exchange邮箱服务器名称(注:完全限定域名),点击“下一步”,验证用户名和密码, 6.验证成功,界面如下: 以上已经完成了邮箱

WPF中使用AxisAngleRotation3D实现CAD的2D旋转功能

原文:WPF中使用AxisAngleRotation3D实现CAD的2D旋转功能 ????? 对于CAD图形来说,3D旋转比较常用,具体实现方法在上篇文章<WPF中3D旋转的实现 >中做了讲解,可以参考Daniel. ????? 今天说一下CAD的2D旋转,2D旋转虽然不如3D那么常用,但也是CAD操作的基本功能需要实现.刚开始的做法是觉得用AxisAngleRotation3D没法实现2D旋转,所以用RotateTransform去实现.但是用它遇到的问题是旋转的transform没有考虑在

【.net 深呼吸】WPF 中的父子窗口

与 WinForm 不同,WPF 并没有 MDI 窗口,但 WPF 的窗口之间是可以存在“父子”关系的. 我们会发现,Window 类公开了一个属性叫 Owner,这个属性是可读可写的,从名字上我们也能猜到,应该是用来设置窗口的父子关系的.这个属性看起来不难用,只要赋个窗口实例即可,而真正的难点是你得搞清楚“谁是谁的父窗口”,“谁是谁的子窗口”,一旦你搞混了,有可能会应用程序带来一些小麻烦. 这个问题是一位妹子问我的,不然怎么说女孩子特别细心呢,这个小玩意儿估计很多时候我们都不会注意到. 下面,

TortoiseGit + msysgit 记住帐号密码方法及使用密匙的方法

Windows 重度用户只能用 for windows 的软件了,所以虽然使用 Git,但还是要找专门的 windows 版本. 最近开始使用 GitHub 来托管一些小项目/兴趣,而自己是重度 win 用户,所以完全命令行总是不习惯(好吧,懒得记命令).然后我用 GitHub for Windows 来管理,不过觉得不是特别顺手,最后转用 TortoiseGit + msysgit,毕竟一直在使用 TortoiseSVN. 具体配置和使用方法我就懒得写,我也不熟悉,反正网上一大堆.这里说说碰到

java在线聊天项目 客户端登陆窗口LoginDialog的注册用户功能

点击下图注册按钮,出现注册用户面板,把手机号和判断相同的密码添加到MySQL数据库中 工作原理: 与单机的软件不同,这个聊天的登录框不能把注册信息直接添加进数据库 而是应当把注册信息发送到服务器 当服务器接收到注册信息后,在服务端把注册信息添加进数据库 首先,做连接数据库的准备 连接数据库需要一个连接数据库的驱动包 -- mysql-connector-java-5.1.7-bin.jar 如果忘记倒入连接mysql数据库的包,会出现java.lang.ClassNotFoundExceptio