原文链接:https://blog.csdn.net/qq_21509637/article/details/82148613

1.首先在App.config中的<configuration>中添加以下代码,最常用的就是appSettings节点了,通过添加key和value键值对,从而完成参数的配置与读写操作,其中key是键,value是具体保存的值,在这声明了三个,分别是账号、密码和是否记住这三组kv键值对。

<appSettings>
    <add key="userName" value="admin"/>
    <add key="password" value="1"/>
    <add key="isRemember" value="true"/>
  </appSettings>
2.前台放上账号,密码和是否记住这几个控件,后台需要引用System.Configuration.dll这个类库,这个类库提供了对客户端应用程序配置文件的访问方法。以下是对配置文件中键值对读写操作的方法:

1)读的方法根据传入键名去找对应的值返回。

2)写的方法传入键值,不为NULL则跟新配置文件。

/// <summary>
        /// 读取客户设置
        /// </summary>
        /// <param name="settingName"></param>
        /// <returns></returns>
        public static string GetSettingString(string settingName)
        {
            try
            {
                string settingString = ConfigurationManager.AppSettings[settingName].ToString();
                return settingString;
            }
            catch (Exception)
            {
                return null;
            }
        }
 
        /// <summary>
        /// 更新设置
        /// </summary>
        /// <param name="settingName"></param>
        /// <param name="valueName"></param>
        public static void UpdateSettingString(string settingName, string valueName)
        {
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 
            if (ConfigurationManager.AppSettings[settingName] != null)
            {
                config.AppSettings.Settings.Remove(settingName);
            }
            config.AppSettings.Settings.Add(settingName, valueName);
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");
        }
初始化的时候读取配置赋值:

txtUsername.Text = GetSettingString("userName");
            txtPassword.Text = GetSettingString("password");
            if (GetSettingString("isRemember") == "true")
            {
                ckbRemember.IsChecked = true;
            }
            else
            {
                ckbRemember.IsChecked = false;
            }
登陆成功,修改配置:

UpdateSettingString("userName", txtUsername.Text);
                UpdateSettingString("password", txtPassword.Text);
                UpdateSettingString("isRemember", "true");
下面放上所有代码(新手写的不好,仅供参考):

前台Xaml:

<Window x:Class="WpfApplication7.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication7"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="550">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="30">账号:</TextBlock>
        <TextBox Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="200" Height="40" FontSize="30" x:Name="txtUsername">
            <TextBox.Resources>
                <VisualBrush x:Key="HintText" TileMode="None" Opacity="0.5" Stretch="None" AlignmentX="Left">
                    <VisualBrush.Visual>
                        <TextBlock FontStyle="Italic" FontSize="30" Text="请输入用户名"/>
                    </VisualBrush.Visual>
                </VisualBrush>
            </TextBox.Resources>
            <TextBox.Style>
                <Style TargetType="TextBox">
                    <Style.Triggers>
                        <Trigger Property="Text" Value="{x:Null}">
                            <Setter Property="Background" Value="{StaticResource HintText}"/>
                        </Trigger>
                        <Trigger Property="Text" Value="">
                            <Setter Property="Background" Value="{StaticResource HintText}"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>
        <TextBlock Grid.Row="1" Grid.Column="0"  HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="30">密码:</TextBlock>
        <TextBox Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="200" Height="40" FontSize="30" x:Name="txtPassword">
            <TextBox.Resources>
                <VisualBrush x:Key="HintText" TileMode="None" Opacity="0.5" Stretch="None" AlignmentX="Left">
                    <VisualBrush.Visual>
                        <TextBlock FontStyle="Italic" FontSize="30" Text="请输入密码"/>
                    </VisualBrush.Visual>
                </VisualBrush>
            </TextBox.Resources>
            <TextBox.Style>
                <Style TargetType="TextBox">
                    <Style.Triggers>
                        <Trigger Property="Text" Value="{x:Null}">
                            <Setter Property="Background" Value="{StaticResource HintText}"/>
                        </Trigger>
                        <Trigger Property="Text" Value="">
                            <Setter Property="Background" Value="{StaticResource HintText}"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>
        <CheckBox Grid.Row="2" Grid.Column="0"  HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="30" x:Name="ckbRemember"></CheckBox>
        <TextBlock Grid.Row="2" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="30">记住我</TextBlock>
        <Button Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Click="Button_Click">登录</Button>
    </Grid>
</Window>
后台C#:

using System;
using System.Windows;
using System.Configuration;
 
namespace WpfApplication7
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
 
        public MainWindow()
        {
            InitializeComponent();
            txtUsername.Text = GetSettingString("userName");
            txtPassword.Text = GetSettingString("password");
            if (GetSettingString("isRemember") == "true")
            {
                ckbRemember.IsChecked = true;
            }
            else
            {
                ckbRemember.IsChecked = false;
            }
 
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (Convert.ToBoolean(ckbRemember.IsChecked))
            {
                UpdateSettingString("userName", txtUsername.Text);
                UpdateSettingString("password", txtPassword.Text);
                UpdateSettingString("isRemember", "true");
                MessageBox.Show("登录并记住密码!");
            }
            else
            {
                UpdateSettingString("userName", "");
                UpdateSettingString("password", "");
                UpdateSettingString("isRemember", "");
                MessageBox.Show("登录不记住密码!");
            }
           
        }
 
        /// <summary>
        /// 读取客户设置
        /// </summary>
        /// <param name="settingName"></param>
        /// <returns></returns>
        public static string GetSettingString(string settingName)
        {
            try
            {
                string settingString = ConfigurationManager.AppSettings[settingName].ToString();
                return settingString;
            }
            catch (Exception)
            {
                return null;
            }
        }
 
        /// <summary>
        /// 更新设置
        /// </summary>
        /// <param name="settingName"></param>
        /// <param name="valueName"></param>
        public static void UpdateSettingString(string settingName, string valueName)
        {
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 
            if (ConfigurationManager.AppSettings[settingName] != null)
            {
                config.AppSettings.Settings.Remove(settingName);
            }
            config.AppSettings.Settings.Add(settingName, valueName);
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");
        }
 
    }
}
做这个功能的时候发现一些问题,在VS里面编译运行的时候,发现App.config的键值对始终不会变,查了半天资料才知道,App.config文件编译时会在Debug文件夹下生成一个“.exe.config”的xml文件和一个“.vshost.exe.config”的xml文件,编译时修改的是“.vshost.exe.config”文件,直接运行时修改的是“.exe.config”文件,而不是App.config文件。下面是摘抄的网上的资料:

app.config, *.exe.config 和 *.vshost.exe.config区别
1.app.config

作为开发时配置参数的文件,可以在vs开发时右键属性设置是否复制到可执行程序同目录下(默认始终不复制)。在不复制的情况下,编译生成可执行程序时会copy该文件为*.exe.config文件和*.vshost.exe.config文件。这样的话,在*/bin/debug/ 或者*/bin/release/目录下就不会有app.config文件了,对应的有exe.config和vshost.exe.config。以后运行exe文件所操作的配置文件(通过System.Configuration对象,System.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None))直接修改的是exe.config文件。

2.*.exe.config

vs调试编译时,如果app.config文件有修改,则会重新copy覆盖到exe.config和vshost.exe.config文件中,否则exe.config不会改变。exe.config文件为程序实际运行时(直接运行.exe程序)直接操作的配置文件。

3.*.vshost.exe.config

该文件主要是在vs调试运行时起作用,在调试运行程序时(*vshost.exe -> *.exe)先copy *.exe.config覆盖*.vshost.exe.config,然后运行程序时操作的配置文件为*.vshost.exe.config.在调试程序结束时(*.exe -> *.vshost.exe)再次copy *.exe.config覆盖*.vshost.exe.config。 所有调试情况下无论怎么修改配置文件,程序退出后都不会修改配置文件(还原了)。所以在vs调试运行程序时通过配置文件来记录之前的操作无法生效。

实际release版本的exe程序时,*.vshost.exe.config 和app.config(如果copy了的话)可以不要的,但是*.exe.config文件必须有。

Winform实现简单的记住用户名密码功能相关推荐

  1. JAVA记住用户名密码功能实现

    1.首先,写一个登陆的jsp页面,做一个form表单的post请求,地址链接到自己的servlet文件 2.然后写servlet,用户名密码验证,判断是否勾选记住密码,并生成cookie,保存到客户端 ...

  2. 你还在这样做:浏览器“记住用户名密码”?

    原文地址: 你还在这样做:浏览器"记住用户名密码"?-今日头条  https://open.toutiao.com/a6453394892038078989/?readmore_c ...

  3. Vue实现登录记住账号密码功能的思路与过程

    文章来源: 学习通http://www.bdgxy.com/ 目录 实现思路 这里有三种方法来存储账号密码: 功能界面 记住账号密码功能的具体实现 密码加密 localStorage cookies ...

  4. git登录报错,git clone无法记住用户名密码,修改git提交用户名

    目录 git登录报错 git无法记住用户名密码 修改git提交用户名 git登录报错 报错如下: 这种问题可能是因为你使用的电脑是之前别人用过的,git的用户信息存储的还是之前登录人的账户密码,所以导 ...

  5. 转载牛人的ASP.NET Cookies简单应用 记住用户名和密码

    不要试图给Password类型的TextBox赋值! 在asp.net中,不要试图给Password类型的TextBox控件赋值! 无论是在设计或是运行时,都不可以的. 猜测的原因是,password ...

  6. 记住用户名密码html,jQuery实现的记住帐号密码功能完整示例

    本文实例讲述了jQuery实现的记住帐号密码功能.分享给大家供大家参考,具体如下: 记住密码是每个有帐号登录的网站必备的,现在说一下通过COOKIE实现的记住密码功能. COOKIE //读取cook ...

  7. c/s项目记住账号密码功能

    1.login.cs中的一开始加载页面//从注册表中读取 是否保存了用户名密码 自动启动配置string RegeditKey = "PMSApp";RegistryKey loc ...

  8. logon oracle 密码 用户名_PLSQL自动登录,记住用户名密码日常使用技巧

    配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Develope ...

  9. uni-app 实现记住账号密码功能

    1.示例: 2.代码: 只看核心代码块 其他不用管 <template><view class="page"><view class="to ...

  10. PLSQL自动登录,记住用户名密码日常使用技巧

    https://www.cnblogs.com/Chary/p/No00008F.html 配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库, ...

最新文章

  1. 计算机组装实训室管理制度,计算机组装与维护实训室管理制度.doc
  2. Protocol Buffer序列化协议及应用
  3. 网络爬虫初步:从访问网页到数据解析
  4. CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)
  5. JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore XXX “迁移到行业标准格式?
  6. vSphere5.5安装教程
  7. python数据分析实战案例logistic_Python机器学习随笔之logistic回归识别手写数字
  8. TDL(HDU-6641)
  9. css不继承上级样式_CSS基础知识(一)
  10. 微软新版 Edge 浏览器叫板 Chrome!
  11. sqlserver 迁移
  12. python版本历史_python历史介绍
  13. 20210108练习
  14. [五]基础数据类型之Short详解
  15. 自定义进度条PictureProgressBar
  16. java多态理解通俗,说说 Java 多态那些事儿~
  17. ios 设置属性的center_iOS游戏平台Game Center成就显示设置指南
  18. 电信10兆指的是多少Mbps
  19. 时间格式化 几分钟前 几小时前 几天前
  20. UDS之浅谈31服务

热门文章

  1. ESP8266 教程3 — 通过TCP组建局域网并通信
  2. vue直播rtmp流
  3. 视频教程-华为HCNA网络工程师【从入门到精通】自学视频[肖哥]-华为认证
  4. 分布式存储系统设计的若干原则
  5. java spring定时器_JAVA中 Spring定时器的两种实现方式
  6. android抓取微信朋友圈,一种快速提取Android微信朋友圈数据的方法
  7. 拼音表大全图_语文汉语拼音教学指导方法|拼音教学游戏大全
  8. golang 常用配置
  9. NOPI导出到excel
  10. 乔姆斯基生成语法_乔姆斯基的转换生成语法理论