WPF帝友借贷系统MV模式开发日志_前台页面搭建
下面是我搭建好的前台登入界面
可以看出,登入界面主要分为两个部分
一个部分是登入程序信息显示(左边)
一部分是登入数据验证部分(右边)因为是桌面软件,所以我并没有使用验证码,
登入按钮没有添加样式,这个不用担心,因为时间关系,我还没有设置资源字典,等到后面同一使用资源字典
登入页面布局完成了,就是逻辑实现了,
我这里没有使用MVVM设计模式,MVVM设计模式还不够熟练,因为时间关系我这里就直接使用MV模式
即Model View 业务逻辑实现全写在view的后置C#代码里(.Xaml.cs)
下面是LoginView的登入界面Xaml
<Window x:Class="DiYouLendingSystemWPF.Login"
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:DiYouLendingSystemWPF"
mc:Ignorable="d"
WindowStyle="None"
WindowStartupLocation="CenterScreen"
Background="Transparent"
AllowsTransparency="True"
Title="Login" Height="650" Width="1100"
>
<Window.Resources>
<SolidColorBrush x:Key="TextBox.Static.Border" Color="#FFABAdB3"/>
<SolidColorBrush x:Key="TextBox.MouseOver.Border" Color="#FF7EB4EA"/>
<SolidColorBrush x:Key="TextBox.Focus.Border" Color="#FF569DE5"/>
<Style x:Key="TextBoxStyle1" TargetType="{x:Type TextBox}">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
<Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="" FontFamily="/Assets/FontImage/#iconfont" FontSize="35" Foreground="#DDD" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<ScrollViewer Grid.Column="1" x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" VerticalContentAlignment="Center"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Opacity" TargetName="border" Value="0.56"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.MouseOver.Border}"/>
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/>
<Condition Property="IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
</MultiTrigger>
</Style.Triggers>
</Style>
<Style x:Key="PasswordBoxStyle1" TargetType="{x:Type PasswordBox}">
<Setter Property="PasswordChar" Value="♥"/>
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
<Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type PasswordBox}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="" FontFamily="/Assets/FontImage/#iconfont" FontSize="35" Foreground="#DDD" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<ScrollViewer Grid.Column="1" x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" VerticalContentAlignment="Center"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Opacity" TargetName="border" Value="0.56"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.MouseOver.Border}"/>
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/>
<Condition Property="IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
</MultiTrigger>
</Style.Triggers>
</Style>
<Style x:Key="TextBoxStyle2" TargetType="{x:Type TextBox}">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
<Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="" FontFamily="/Assets/FontImage/#iconfont" FontSize="35" Foreground="#DDD" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<ScrollViewer Grid.Column="1" x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" VerticalContentAlignment="Center"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Opacity" TargetName="border" Value="0.56"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.MouseOver.Border}"/>
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/>
<Condition Property="IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
</MultiTrigger>
</Style.Triggers>
</Style>
<Style x:Key="TextBoxStyle3" TargetType="{x:Type TextBox}">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
<Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="120"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="" FontFamily="/Assets/FontImage/#iconfont" FontSize="35" Foreground="#DDD" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<ScrollViewer Grid.Column="1" x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" VerticalContentAlignment="Center"/>
<TextBlock x:Name="LocalVerificationCode" Text="{Binding Path=Text, ElementName=TextBoxVerificationCodeFull}" Grid.Column="2" FontSize="40" Foreground="Black" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Opacity" TargetName="border" Value="0.56"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.MouseOver.Border}"/>
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/>
<Condition Property="IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid x:Name="GridCole">
<Grid x:Name="GridLoginView" Visibility="Visible">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border BorderThickness="5" Background="#FF8374E9" BorderBrush="#FF8374E9" CornerRadius="9,0,0,9" >
<Border BorderBrush="#FF8374E9" BorderThickness="20,200,200,280" x:Name="border_ZiSe">
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Center" >
<TextBlock Text="欢迎登录" FontSize="58" Foreground="White"></TextBlock>
<TextBlock Text="帝友拍卖系统客户端WPF版" FontSize="18" Foreground="White"></TextBlock>
</StackPanel>
</Border>
</Border>
<Border Grid.Column="1" Background="White" BorderThickness="5" BorderBrush="White" CornerRadius="0,9,9,0">
<Border Background="White" BorderBrush="White" BorderThickness="40,40,120,40" x:Name="BorderMouse">
<Grid x:Name="GridDengRu">
<Grid.RowDefinitions>
<RowDefinition Height="16*"></RowDefinition>
<RowDefinition Height="5*"></RowDefinition>
<RowDefinition Height="3*"></RowDefinition>
<RowDefinition Height="5*"></RowDefinition>
<RowDefinition Height="1*"></RowDefinition>
<RowDefinition Height="1*"></RowDefinition>
<RowDefinition Height="1*"></RowDefinition>
<RowDefinition Height="8*"></RowDefinition>
<RowDefinition Height="12*"></RowDefinition>
</Grid.RowDefinitions>
<TextBox x:Name="textBox_JobNumber" FontSize="25" Grid.Row="1" Foreground="#FFABADB3" BorderThickness="0,0,0,2" BorderBrush="#FF8374E9"/>
<PasswordBox x:Name="passwordBox_Password" FontSize="25" Grid.Row="3" Foreground="#FFABADB3" BorderThickness="0,0,0,2" BorderBrush="#FF8374E9"/>
<Grid Grid.Row="7">
<Grid.RowDefinitions>
<RowDefinition Height="1*"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
<RowDefinition Height="1*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="76*"></ColumnDefinition>
<ColumnDefinition Width="279*"></ColumnDefinition>
<ColumnDefinition Width="25*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Grid.Row="1" x:Name="ButtonDengRu" FontSize="23" FontFamily="华文楷体" Content="登录">
</Button>
<StackPanel Grid.Row="2" Grid.ColumnSpan="2" Orientation="Horizontal">
<StackPanel x:Name="ButtonEnroll" Orientation="Horizontal" Margin="5,5,0,0">
<TextBlock Text="没有账号?" Foreground="#FF938686"></TextBlock>
<TextBlock Text="注册>>" x:Name="MouseTextBlockZhuChe"></TextBlock>
</StackPanel>
</StackPanel>
<Grid Grid.Column="1" Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="21"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="114*"></ColumnDefinition>
<ColumnDefinition Width="80*"></ColumnDefinition>
<ColumnDefinition Width="80*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<CheckBox x:Name="checkBox_JiZhuMM" Grid.Row="1" Grid.Column="1" FontSize="14" FontFamily="华文楷体">记住密码</CheckBox>
<CheckBox x:Name="checkBox_ZiDongDR" Grid.Row="1" Grid.Column="2" FontSize="14" FontFamily="华文楷体">自动登录</CheckBox>
</Grid>
</Grid>
</Grid>
</Border>
</Border>
</Grid>
<Grid x:Name="GridButtonEnroll" Visibility="Hidden">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border BorderThickness="5" Background="#FF8374E9" BorderBrush="#FF8374E9" CornerRadius="9,0,0,9" >
<Border BorderBrush="#FF8374E9" BorderThickness="20,200,200,280">
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Center" >
<TextBlock Text="欢迎注册" FontSize="58" Foreground="White"></TextBlock>
<TextBlock Text="帝友拍卖系统客户端WPF版" FontSize="18" Foreground="White"></TextBlock>
</StackPanel>
</Border>
</Border>
<Border Grid.Column="1" Background="White" BorderThickness="5" BorderBrush="White" CornerRadius="0,9,9,0">
<Border Background="White" BorderBrush="White" BorderThickness="40,40,80,40">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
<RowDefinition Height="2*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Visibility="Hidden" x:Name="TextBoxVerificationCodeFull"></TextBlock>
<TextBox x:Name="UserName" VerticalContentAlignment="Center" Grid.Row="1" Margin="15" Style="{DynamicResource TextBoxStyle1}"></TextBox>
<PasswordBox x:Name="UserPassword" Foreground="#FF8374E9" VerticalContentAlignment="Center" Grid.Row="2" Margin="15" Style="{DynamicResource PasswordBoxStyle1}"></PasswordBox>
<ComboBox x:Name="UserSex" VerticalContentAlignment="Center" Grid.Row="3" Margin="15"></ComboBox>
<TextBox x:Name="UserEmail" VerticalContentAlignment="Center" Grid.Row="4" Margin="15" Style="{DynamicResource TextBoxStyle2}"></TextBox>
<TextBox x:Name="TextBoxVerificationCode" VerticalContentAlignment="Center" Grid.Row="5" Margin="15" Style="{DynamicResource TextBoxStyle3}"></TextBox>
<DockPanel Margin="50,10" Grid.Row="6">
<Button x:Name="ButtonUserEnroll" DockPanel.Dock="Left" FontSize="40" FontFamily="隶书" Padding="20,10">立即注册</Button>
</DockPanel>
</Grid>
</Border>
</Border>
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="414,606,0,-93" TextWrapping="Wrap" Text="已有账户?立即登入" VerticalAlignment="Top" Foreground="#FFABAdB3" Grid.Column="1"/>
</Grid>
</Grid>
</Window>
可以看出,这个页面不止有登入页面,因为这是我上个星期写的,而这个星期,我又给登入页面添加了一个注册页面
但这里还是先写登入页面
登入页面布局完成了,就是后台逻辑了
页面布局能直接拉过去用,因为我事件都写在Xaml的后置C#代码了
因为只有两个判断,判断用户名是否存在和密码是否输入正确
所以这里直接使用一个方法解决
private void ButtonDengRu_Click(object sender, RoutedEventArgs e)
{
string userNumber = textBox_JobNumber.Text;
string userPassword = passwordBox_Password.Password;
bool passwordIsTrue = checkBox_JiZhuMM.IsChecked ?? false;
bool isAutoLogin = checkBox_ZiDongDR.IsChecked ?? false;
if (MyClassLibrary.ControlTheOperating.ControlIsNull.CanEnterThatTheControlContentIsEmpty(GridDengRu))
{
MessageBox.Show("请将输入框填写完整");
return;
}
switch (WhereUserInformationList(userNumber, userPassword, out Model.用户表 userInformation))
{
case 0:
MessageBox.Show("密码输入错误,请核对后再登入");
break;
case 1:
UserLogin(userInformation, passwordIsTrue, isAutoLogin);
break;
default:
MessageBox.Show("工程性错误");
break;
}
return;
}
首先判断用户该输入的是否输入了,如果全部输入了,将数据输入WhereUserInformationList()方法,查询出符合条件的用户数据
下面是WhereUserInformationList方法
private sbyte WhereUserInformationList(string userNumber, string userPassword, out Model.用户表 userInformation)
{
userInformation = null;
sbyte numberOfQualifying = 0;
long userID = long.TryParse(userNumber, out long ID) ? ID : 0;
var userInformationList = myModel.用户表.Where(m => m.用户ID == userID || m.用户昵称 == userNumber || m.用户邮箱 == userNumber);
foreach (Model.用户表 item in userInformationList)
{
if (item.用户密码.Trim().Equals(userPassword))
{
numberOfQualifying++;
userInformation = item;
}
}
return numberOfQualifying;
}
可以看出用户可以使用用户用户昵称,或者用户邮箱登入,然后将查询到的数据进行遍历
用于获取到密码一致的用户数据
然后返回登入按钮点击方法
然后登入方法会判断,是否只有一条数据,如果有多条数据,则会提示用户,请输入用户邮箱登入
如果没有数据,则提示用户,用户密码输入错误
当只有一条数据符合要求的时候
则调用用户登入方法UserLogin() 方法内容如下
/// <summary>
/// 用户登录
/// </summary>
/// <param name="UserInformation">用户表</param>
/// <param name="UserRecordingIsTrue">是否记住密码</param>
/// <param name="isAutoLogin">是否自动登入</param>
private void UserLogin(Model.用户表 UserInformation, bool UserRecordingIsTrue, bool isAutoLogin)
{
// Properties.Settings.Default.FieldName = "server";//程序中修改配置变量的数值
//roperties.Settings.Default.Save();//使用Save方法保存更改 不保存,配置文件不修改
long huiYuanID = myModel.会员表.Single(m => m.用户ID.Equals(UserInformation.用户ID)).会员ID;
Properties.Settings.Default.UserInformation = new SettingsClass.UserInformation
{
Email = UserInformation.用户邮箱,
Sex = UserInformation.用户性别ID,
UserName = UserInformation.用户昵称,
UserID = UserInformation.用户ID,
IsAutoLogin = isAutoLogin,
UserPasswrod = UserInformation.用户密码.Trim(),
UserRecordingIsTrue = UserRecordingIsTrue,
ImagePath = UserInformation.用户头像,
HuiYuanID = huiYuanID
};
//配置更新
Properties.Settings.Default.Save();
new MainWindow().Show();
this.Close();
}
首先,我会根据用户是否选择了保存数据而选择是否将用户数据保存至Settings
在做这一步之前我们可以看看Settings
如上图,可以看到,Settings只能保存一些简单的数据类型
而如果想要保存用户表的数据,则需要单独建一个内,我这里单独为Settings设置一个类库,用于Settings的数据存储
如上图,UserInFormation就是用于存放用户数据结构的表(,以后如果要存储复杂的数据结构,就在这个类里面新建一个类)
然后将这个类库引入至我的程序,就能使用UserInformation类型来存储用户数据了
long huiYuanID = myModel.会员表.Single(m => m.用户ID.Equals(UserInformation.用户ID)).会员ID;
Properties.Settings.Default.UserInformation = new SettingsClass.UserInformation
{
Email = UserInformation.用户邮箱,
Sex = UserInformation.用户性别ID,
UserName = UserInformation.用户昵称,
UserID = UserInformation.用户ID,
IsAutoLogin = isAutoLogin,
UserPasswrod = UserInformation.用户密码.Trim(),
UserRecordingIsTrue = UserRecordingIsTrue,
ImagePath = UserInformation.用户头像,
HuiYuanID = huiYuanID
};
//配置更新
Properties.Settings.Default.Save();
需要注意的是Settings设置的范围需要是用户,如果是应用程序的话,用户就只能get,而不能set
然后,将用户数据保存至Settings后,下次打开程序就可以调用LoginDataIsBackfilled方法
/// <summary>
/// 登入页面数据回填
/// </summary>
private void LoginDataIsBackfilled()
{
textBox_JobNumber.Text = Properties.Settings.Default.UserInformation?.UserName;
passwordBox_Password.Password = Properties.Settings.Default.UserInformation?.UserPasswrod;
checkBox_JiZhuMM.IsChecked = Properties.Settings.Default.UserInformation?.UserRecordingIsTrue ?? false;
checkBox_ZiDongDR.IsChecked = Properties.Settings.Default.UserInformation?.IsAutoLogin ?? false;
}
如上图所示,将直接取用Settings内的数据回填至LoginView
那么登入就完成了
验证一下
下面是全部的c#代码
using DiYouLendingSystemWPF.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace DiYouLendingSystemWPF
{
/// <summary>
/// Login.xaml 的交互逻辑
/// </summary>
public partial class Login : Window
{
private readonly Model.DiYouLendingSystemEntities myModel = new Model.DiYouLendingSystemEntities();
private readonly Email email = new Email();
public string VerificationCode { get; set; }
public Login()
{
InitializeComponent();
Loaded += Login_Loaded;
//关闭程序点击事件绑定
GridCole.MouseRightButtonDown += GridCole_MouseRightButtonDown;
//窗体拖动事件绑定
GridCole.MouseLeftButtonDown += (s, e) => { if (e.LeftButton == MouseButtonState.Pressed) this.DragMove(); };
//登入按钮点击事件
ButtonDengRu.Click += ButtonDengRu_Click;
///窗体放大缩小
ButtonEnroll.PreviewMouseLeftButtonDown += (s, e) => { GridLoginView.Visibility = Visibility.Hidden; GridButtonEnroll.Visibility = Visibility.Visible; };
///注册页面,用户名检查
UserName.LostFocus += (s, e) => { bool isRepeat = myModel.用户表.Where(m => m.用户昵称.Equals(UserName.Text)).Count() != 0; TitiRemind(s, "该用户已注册", isRepeat); };
///注册页面邮箱检查
UserEmail.LostFocus += UserEmail_LostFocus;
///注册按钮单击事件
ButtonUserEnroll.Click += ButtonUserEnroll_Click;
///返回登入页面
textBlock.PreviewMouseLeftButtonDown += TextBlock_PreviewMouseLeftButtonDown;
}
private void TextBlock_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
GridLoginView.Visibility = Visibility.Visible;
GridButtonEnroll.Visibility = Visibility.Hidden;
}
/// <summary>
/// 登入按钮单击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ButtonUserEnroll_Click(object sender, RoutedEventArgs e)
{
string verificationCode = TextBoxVerificationCode.Text;
if (!verificationCode.Equals(this.VerificationCode))
{
MessageBox.Show("验证码输入错误,请重新输入");
TextBoxVerificationCode.Text = "";
return;
}
Model.用户表 yongHu = new Model.用户表
{
用户头像 = "shandianxiaofeixia.png",
用户昵称 = UserName.Text,
用户密码 = UserPassword.Password,
用户邮箱 = UserEmail.Text,
用户性别ID = ((dynamic)UserSex.SelectedItem).id,
注册时间 = DateTime.Now
};
myModel.用户表.Add(yongHu);
if (myModel.SaveChanges() != 1)
{
MessageBox.Show("用户新增失败");
return;
}
Model.会员表 huiYuan = new Model.会员表
{
用户ID = yongHu.用户ID,
会员等级ID = 1,
会员编号 = "HY" + DateTime.Now.ToString("yyyyMMddHHmmss"),
会员信用积分 = 0,
会员信用等级ID = 0
};
myModel.会员表.Add(huiYuan);
if (myModel.SaveChanges() != 1)
{
MessageBox.Show("用户新增失败");
return;
}
if (MessageBox.Show("用户新增成功,自动成为免费会员,要用此账户直接登入吗?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Information).ToString() == "Yes")
{
UserLogin(yongHu, true, false);
}
}
/// <summary>
/// 用户邮箱检查方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void UserEmail_LostFocus(object sender, RoutedEventArgs e)
{
if (email.EmailFormatCheck(UserEmail.Text))
{
bool isRepeat = myModel.用户表.Where(m => m.用户邮箱.Equals(UserEmail.Text)).Count() != 0;
TitiRemind(sender, "该邮箱已注册", isRepeat);
VerificationCodeIsGenerated(UserEmail.Text, UserName.Text);
}
else
{
TitiRemind(sender, "邮箱格式有误", true);
}
}
/// <summary>
/// 控件边框颜色转换,Tool添加
/// </summary>
/// <param name="sender"></param>
/// <param name="remind"></param>
/// <param name="IsAddRemind"></param>
private void TitiRemind(object sender, string remind, bool IsAddRemind)
{
//HEX16色转Bursh:Brush brush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFFFF"));
//RGB三原色转Bursh:Brush brush = new SolidColorBrush(Color.FromRgb(255, 255, 255));
//HEX16色转Bursh:Brush brush = (Brush)new BrushConverter().ConvertFromString("#FFFFFF");
//Color转Bursh:Brush brush = new SolidColorBrush(Colors.White);
if (sender is Control control)
{
control.ToolTip = IsAddRemind ? remind : null;
control.BorderBrush = IsAddRemind ? new SolidColorBrush(Colors.Red) : (Brush)new BrushConverter().ConvertFromString("#FFABAdB3");
}
}
//登入页面加载事件
private void Login_Loaded(object sender, RoutedEventArgs e)
{
LoginDataIsBackfilled();
//Binding设置
// VerificationCodeBinding();
ComboBoxData();
}
/// <summary>
/// 下拉框数据绑定
/// </summary>
private void ComboBoxData()
{
var userSexData = myModel.性别表.Select(m => new { id = m.性别ID, content = m.性别名称 }).ToList();
UserSex.ItemsSource = userSexData;
UserSex.SelectedValuePath = "id";
UserSex.DisplayMemberPath = "content";
}
//private void VerificationCodeBinding()
//{
// //Binding binding = new Binding();
// //binding.Source = verificationCodeGenerated;
// //binding.Path = new PropertyPath("");
// 使用Binding连接数据源与Binding目标
// //BindingOperations.SetBinding(this.VerificationCode,TextBlock.TextProperty,binding)
//}
/// <summary>
/// 登入页面数据回填
/// </summary>
private void LoginDataIsBackfilled()
{
textBox_JobNumber.Text = Properties.Settings.Default.UserInformation?.UserName;
passwordBox_Password.Password = Properties.Settings.Default.UserInformation?.UserPasswrod;
checkBox_JiZhuMM.IsChecked = Properties.Settings.Default.UserInformation?.UserRecordingIsTrue ?? false;
checkBox_ZiDongDR.IsChecked = Properties.Settings.Default.UserInformation?.IsAutoLogin ?? false;
}
private void ButtonDengRu_Click(object sender, RoutedEventArgs e)
{
string userNumber = textBox_JobNumber.Text;
string userPassword = passwordBox_Password.Password;
bool passwordIsTrue = checkBox_JiZhuMM.IsChecked ?? false;
bool isAutoLogin = checkBox_ZiDongDR.IsChecked ?? false;
if (MyClassLibrary.ControlTheOperating.ControlIsNull.CanEnterThatTheControlContentIsEmpty(GridDengRu))
{
MessageBox.Show("请将输入框填写完整");
return;
}
switch (WhereUserInformationList(userNumber, userPassword, out Model.用户表 userInformation))
{
case 0:
MessageBox.Show("密码输入错误,请核对后再登入");
break;
case 1:
UserLogin(userInformation, passwordIsTrue, isAutoLogin);
break;
default:
MessageBox.Show("请输入用户邮箱登入");
break;
}
return;
}
/// <summary>
/// 用胡数据
/// </summary>
/// <param name="userNumber"></param>
/// <param name="userPassword"></param>
/// <param name="userInformation"></param>
/// <returns></returns>
private sbyte WhereUserInformationList(string userNumber, string userPassword, out Model.用户表 userInformation)
{
userInformation = null;
sbyte numberOfQualifying = 0;
long userID = long.TryParse(userNumber, out long ID) ? ID : 0;
var userInformationList = myModel.用户表.Where(m => m.用户ID == userID || m.用户昵称 == userNumber || m.用户邮箱 == userNumber);
foreach (Model.用户表 item in userInformationList)
{
if (item.用户密码.Trim().Equals(userPassword))
{
numberOfQualifying++;
userInformation = item;
}
}
return numberOfQualifying;
}
/// <summary>
/// 用户登录
/// </summary>
/// <param name="UserInformation">用户表</param>
/// <param name="UserRecordingIsTrue">是否记住密码</param>
/// <param name="isAutoLogin">是否自动登入</param>
private void UserLogin(Model.用户表 UserInformation, bool UserRecordingIsTrue, bool isAutoLogin)
{
// Properties.Settings.Default.FieldName = "server";//程序中修改配置变量的数值
//roperties.Settings.Default.Save();//使用Save方法保存更改 不保存,配置文件不修改
long huiYuanID = myModel.会员表.Single(m => m.用户ID.Equals(UserInformation.用户ID)).会员ID;
Properties.Settings.Default.UserInformation = new SettingsClass.UserInformation
{
Email = UserInformation.用户邮箱,
Sex = UserInformation.用户性别ID,
UserName = UserInformation.用户昵称,
UserID = UserInformation.用户ID,
IsAutoLogin = isAutoLogin,
UserPasswrod = UserInformation.用户密码.Trim(),
UserRecordingIsTrue = UserRecordingIsTrue,
ImagePath = UserInformation.用户头像,
HuiYuanID = huiYuanID
};
//配置更新
Properties.Settings.Default.Save();
new MainWindow().Show();
this.Close();
}
/// <summary>
/// 关闭按钮点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void GridCole_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
if (MessageBox.Show("确定要关闭吗?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Information).ToString() == "Yes")
{
//关闭应用程序
Application.Current.Shutdown();
}
}
/// <summary>
/// 数字验证码生成
/// </summary>
public void VerificationCodeIsGenerated(string strUserEmail, string strUserName)
{
int localNumericVerificationCode = new Random(Guid.NewGuid().GetHashCode()).Next(1000, 9999);
int emailVerificationCode = new Random(Guid.NewGuid().GetHashCode()).Next(1000, 9999);
VerificationCode = (localNumericVerificationCode + emailVerificationCode).ToString();
TextBoxVerificationCodeFull.Text = localNumericVerificationCode.ToString();
string messageContent = "《帝友科技》" + emailVerificationCode.ToString() + "注册保护验证码,用于帝友系统用户注册的验证,请勿转发";
email.SendAMessage("jiumeilove@aliyun.com", "帝友科技", "FZY523894.aly", strUserEmail, strUserName, "帝友系统WPF版注册验证码", messageContent);
}
}
}