WPF帝友借贷系统MV模式开发日志2021/04/02_前台登入注册页面搭建

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="&#xe710;" 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="&#xe664;" 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="&#xe678;" 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="&#xe63c;" 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);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qayrup

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值