C# 窗体(登录界面)

C# 窗体(登录界面)

简介

在开发一个C# WinForm 应用程序时,登录界面作为很重要的一环,往往是APP的入口界面,这也是给人们留下“第一印象”的地方之一,因此为了让应用程序展现更好的用户体验,设计一个美观、实用、易用的登录界面显得尤为重要。

本文将讲解如何使用C# WinForm设计一个简单而实用的登录界面。

实现方法

  1. 设计登录界面

登录界面应该包括输入用户名、密码、记住密码、自动登录、登录和退出按钮等界面。WinFrom有很多常用的控件,常用的有文本框、复选框和按钮,首先在Visual Studio上创建WinFrom窗体项目,然后拖动控件到需求区域即可。

  1. 实现记住密码和自动登录功能

在登录界面中,有一个实用的功能即“记住密码和自动登录功能”,这是用户在下一次进入时可以免去输入用户名和密码的步骤。

//改变记住密码和自动登录按钮的选择状态
private void cbRemember_CheckedChanged(object sender, EventArgs e)
{
   if (cbRemember.Checked == false)
   {
      cbAutoLogin.Checked = false;
   }
}

private void cbAutoLogin_CheckedChanged(object sender, EventArgs e)
{
   if (cbAutoLogin.Checked == true)
   {
      cbRemember.Checked = true;
   }
}

// 保存密码
private void SaveConfig()
{
   Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
   config.AppSettings.Settings["UserName"].Value = this.txtUserName.Text;
   config.AppSettings.Settings["Password"].Value = this.txtPassword.Text;
   config.AppSettings.Settings["RememberPassword"].Value = this.cbRemember.Checked.ToString();
   config.AppSettings.Settings["AutoLogin"].Value = this.cbAutoLogin.Checked.ToString();
   config.Save(ConfigurationSaveMode.Modified);
}

// 读取密码
private void GetConfig()
{
   this.txtUserName.Text = ConfigurationManager.AppSettings["UserName"];
   this.txtPassword.Text = ConfigurationManager.AppSettings["Password"];
   bool rememberPassword;
   if (bool.TryParse(ConfigurationManager.AppSettings["RememberPassword"], out rememberPassword))
   {
      this.cbRemember.Checked = rememberPassword;
   }
   bool autoLogin;
   if (bool.TryParse(ConfigurationManager.AppSettings["AutoLogin"], out autoLogin))
   {
      this.cbAutoLogin.Checked = autoLogin;
   }
}
  1. 实现登录验证功能

在WinFrom应用程序开发中,登录验证是无法避免的一部分,我们需要先完成用户名和密码的验证,当用户输入的用户名和密码在数据库中有对应项时,登录成功,退出登录或者切换账户的时候,应该将密码或者Cookie清空,保证账户的安全性。

private void btnLogin_Click(object sender, EventArgs e)
{
   string serverName = "localhost";
   string dbName = "db_test";
   string userName = "root";
   string password = "123";
   string strSql = string.Format("select * from userInfo where Username='{0}' and Password='{1}'", txtUserName.Text, txtPassword.Text);
   SqlConnection sqlcon = new SqlConnection(string.Format("server={0};database= {1};uid={2};pwd={3}", serverName, dbName, userName, password));
   try
   {
      sqlcon.Open();//打开
      SqlCommand sqlcom = new SqlCommand(strSql, sqlcon);
      SqlDataReader dr = sqlcom.ExecuteReader();
      if (dr.Read())
      {
         SaveConfig();

         this.DialogResult = DialogResult.OK;//窗体的DialogResult属性,如果是OK,返回DialogResult.OK,否则返回其他值
      }
      else
      {
         MessageBox.Show("用户名或密码错误", "登录失败");
      }
   }
   catch(Exception ex)
   {
      MessageBox.Show(ex.ToString());
   }
}
  1. 注销

完成“记住密码和自动登录功能”和“登录验证功能”之后,应该在主窗体添加一个用户控件,作为注销控制按钮,可以让用户注销登录。

private void btnLogout_Click(object sender, EventArgs e)
{   
    ConfigurationManager.AppSettings["UserName"] = "";
    ConfigurationManager.AppSettings["Password"] = "";
    ConfigurationManager.AppSettings["RememberPassword"] = "false";
    ConfigurationManager.AppSettings["AutoLogin"] = "false";

    this.DialogResult = DialogResult.Cancel;
}

结论

通过这篇C# WinForm登录界面开发的教程,你应该对WinFrom的生命周期和用户控件等内容有了更深刻的认识,同时也明白了设计实用的登录界面的重要性,为接下来的程序设计学习打下了基础。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 窗体(登录界面) - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • spring初始化源码代码浅析

    首先,我们需要了解Spring的初始化过程是什么,可以大致分为以下几个步骤: Spring容器的创建 Spring容器的配置 Spring容器的初始化 在这篇攻略中,我们将主要关注第三步- Spring容器的初始化源码分析,具体内容如下: 1. 获取并解析XML配置文件 Spring初始化的第一步是获取并解析XML文件,这里会用到Spring的核心模块spr…

    other 2023年6月20日
    00
  • golang实现浏览器导出excel文件功能

    下面是详细的“golang实现浏览器导出excel文件功能”的攻略。 前言 Excel文件是企业中非常重要的文档格式之一,因此在很多场景下都需要通过浏览器导出Excel文件。本文将介绍在Golang中如何实现浏览器导出Excel文件功能。 原理和方案 在Golang中,我们可以通过任何能够返回二进制文件的HTTP处理函数进行文件下载。可以通过以下三种方式实现…

    other 2023年6月26日
    00
  • C++11正则表达式详解(regex_match、regex_search和regex_replace)

    C++11正则表达式是一项非常强大的功能,允许你在一个文本字符串中查找、匹配和替换匹配的子字符串。在本文中,我们将重点介绍C++11正则表达式常用的三个函数:regex_match、regex_search和regex_replace,并提供一些示例来帮助您理解这些函数的用法。 regex_match 函数regex_match用于检查一个字符串是否完全匹配…

    other 2023年6月26日
    00
  • 魔兽世界更新卡初始化怎么办 卡初始化及hosts文件修改方法

    当魔兽世界卡在初始化界面时,可能是因为您的hosts文件没有正确配置,或者是blizzard更新服务器出现问题。下面将详细介绍魔兽世界卡初始化的问题原因以及解决方法。 一、问题原因 Host 文件未正确配置:魔兽世界更新器需要访问 blizzard 更新服务器才能更新游戏。在国内,由于 GFW 的存在,可能需要通过修改 Host 文件以实现通过 VPN 访问…

    other 2023年6月20日
    00
  • C++构造函数初始化列表的实现详解

    下面我就详细地讲解一下“C++构造函数初始化列表的实现详解”的攻略和示例: C++构造函数初始化列表的实现详解 1. 什么是C++构造函数初始化列表? 在C++中,构造函数可以用来初始化一个对象的成员变量和基类对象。通常,我们使用赋值语句来达到这个目的,例如: class Point { public: Point(int x, int y) { m_x =…

    other 2023年6月20日
    00
  • 安装Windows7时电脑提示缺少所需的CD/DVD驱动器设备驱动程序的原因以及解决方案

    安装Windows7时电脑提示缺少所需的CD/DVD驱动器设备驱动程序的原因以及解决方案 原因 当我们在安装Windows7时,有时会出现电脑提示缺少所需的CD/DVD驱动器设备驱动程序的情况,这种情况通常是由于以下原因导致的: 光驱或USB驱动器的设备驱动程序损坏或不兼容; 主板芯片组或SATA控制器的驱动程序缺失或不兼容; 光盘或USB设备的安装文件损坏…

    other 2023年6月26日
    00
  • React中使用axios发送请求的几种常用方法

    下面给您讲解一些React中使用axios发送请求的几种常用方法: 1. 安装axios 首先,在React应用中使用axios发送请求之前,我们必须先安装axios。 可以使用以下命令进行安装: npm install axios 2. GET请求 发送GET请求是获取数据最常用的方法之一,下面是一个使用axios发送GET请求的示例代码: import …

    other 2023年6月27日
    00
  • Go语言数据类型详细介绍

    Go语言数据类型详细介绍 Go语言是一门强类型语言,它的数据类型在编程中起到至关重要的作用。本文将对Go语言的数据类型进行详细介绍,让大家更好地掌握这门语言。 Go语言基本数据类型 Go语言提供了下面几种基本数据类型: 整型(int) Go语言提供多种整型类型,包括 int8、int16、int32、int64 和 uint8、uint16、uint32、u…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部