900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Winform实现简单的记住用户名密码功能

Winform实现简单的记住用户名密码功能

时间:2021-01-13 00:42:52

相关推荐

Winform实现简单的记住用户名密码功能

原文链接:/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="/winfx//xaml/presentation"

xmlns:x="/winfx//xaml"

xmlns:d="/expression/blend/"

xmlns:mc="/markup-compatibility/"

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文件必须有。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。