当前位置:网站首页>WinForm(四)一种实现登录的方式
WinForm(四)一种实现登录的方式
2022-08-09 16:09:00 【dotNET跨平台】
首先声明,这只是一种登录方式,并不是最好的方式,用这个例子为了说明登录窗体和Application的关系。
在登录前,定义了用户实体,然后是一个通用的类,存放进程中当前登录的用户,所以CurrentUser是静态类。
internal class User
{
public int ID { get; set; }
public string? Name { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
}
internal class Common
{
internal static User? CurrentUser { get; set; }
}这里的登录窗体不受Application管理,当登录成功后,会进入Application Run的主窗体。登录窗体要用ShowDialog模态化显示方式,让进程阻塞在登录窗体上,然后等待结束登录完成关闭后,获取登录窗体的对话窗结果,这里是如果Ok,定义为登录成功。
namespace WinFormDemo03
{
internal static class Program
{
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
var loginForm = new LoginForm();
if (loginForm.ShowDialog() == DialogResult.OK)
{
Application.Run(new MainForm());
}
}
}
}登录窗体的布局
登录按钮中要验证当前用户和密码是否存在,存在的话,就把用户保存在Common.CurrentUser中,以供后续主窗体或其他窗体使用,成功登录后要把当前窗体的DialogResult设置成Ok,因为在Main函数里,这就是判断登录的条件。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WinFormDemo03.Models;
namespace WinFormDemo03
{
public partial class LoginForm : Form
{
private readonly List<User> _users;
public LoginForm()
{
_users = new List<User>()
{
new User{ ID=1,Name="桂素伟", UserName="gsw",Password="abc123" },
new User{ ID=2,Name="张三", UserName="zs",Password="123abc" }
};
InitializeComponent();
}
private void loginButton_Click(object sender, EventArgs e)
{
Common.CurrentUser = _users.SingleOrDefault(s => s.UserName == usernameTextBox.Text && s.Password == passwordTextBox.Text);
if (Common.CurrentUser == null)
{
MessageBox.Show("用户名或密码错误,请重新输入!");
}
else
{
this.DialogResult = DialogResult.OK;
}
}
}
}登录的实现完成了:
1、登录是模态窗体,阻塞后台操作,登录成功,继续运行,失败,通出进程。
2、登录成功后要保留登录用户,以备后用。
3、登录成功与否是用了窗体的DialogResult,当然也可以定义其他属性来完成。
本例中是说明一种思路,现实中的登录方式各种各样,有次数限制的,有与三方通信的,还有指纹人脸的,都是在最基础上作增量。希望对你有所收获。
边栏推荐
- Apple Developer Account Apply for D-U-N-S Number
- Print the star chart "Recommended Collection"
- Optimization of a piece of JDBC code (Part 1)
- TMin - whether TMin overflows
- 单片机的优点和单片机开发的流程
- 面试中老生常谈的MySQL问答集锦夯实基础
- PADS generates bitmap
- 融云 x N 世界:构建无限用户实时交互的「元宇宙会场」
- Redis Cache Expiration and Retirement Policy
- Became CTO, was killed by my boss in 6 months, I lost 10 million
猜你喜欢

对象模型-虚指针虚表

Reasons for slow startup of IDEA (1)

HR to get the entry date RP_GET_HIRE_DATE

3 Feature Binning Methods!

面试官:Redis 大 key 要如何处理?
![[ Kitex Source Code Interpretation ] Request to retry](/img/d9/c1871c15cc9124e919d22c9adcc75b.png)
[ Kitex Source Code Interpretation ] Request to retry

Knowledge Bits - How to Write a Project Summary

Vim practical skills_2. Normal mode and insert mode

B43 - 基于STM32单片机的自动视力检测仪

想通这点,治好 AI 打工人的精神内耗
随机推荐
kafka 通过 jdbc 从oracle抓取数据
对象模型-虚指针虚表
生产者-消费者线程模型学习
kubernetes之helm简介、安装、配置
[ Kitex Source Code Interpretation ] Request to retry
B44 - Based on stm32 bluetooth intelligent voice recognition classification broadcast trash
原油等特殊期货开户要求和豁免
Installation and use of Lombok plugin in IDEA
如何通过 open-local 玩转容器本地存储? | 龙蜥技术
「我觉得AI领域乙烷」网友:你说的太多了,让AI来总结一下
A40 - 基于51单片机的GSM模块优化设计
【开源教程4】疯壳·开源编队无人机-OPENMV 脚本烧写
聊聊基于docker部署的mysql如何进行数据恢复
【燃】是时候展现真正的实力了!一文看懂2022华为开发者大赛技术亮点
利用C#传输Json数据
MySQL 5.5系列安装步骤教程(图解版)
无需支付688苹果开发者账号,xcode13打包导出ipa,提供他人进行内测
Redis Cache Expiration and Retirement Policy
什么是硬件集成开发?硬件集成开发的核心有哪些?
2.1、基于并行上下文注意网络的场景文本图像超分辨率