WinForm(四)一种实现登录的方式

首先声明,这只是一种登录方式,并不是最好的方式,用这个例子为了说明登录窗体和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());}}}
}

登录窗体的布局cca450f77261660e3c30e40fd96fd15b.png

登录按钮中要验证当前用户和密码是否存在,存在的话,就把用户保存在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,当然也可以定义其他属性来完成。

本例中是说明一种思路,现实中的登录方式各种各样,有次数限制的,有与三方通信的,还有指纹人脸的,都是在最基础上作增量。希望对你有所收获。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java多线程4:synchronized锁机制

脏读 一个常见的概念。在多线程中&#xff0c;难免会出现在多个线程中对同一个对象的实例变量进行并发访问的情况&#xff0c;如果不做正确的同步处理&#xff0c;那么产生的后果就是"脏读"&#xff0c;也就是取到的数据其实是被更改过的。 按照正常来看应该打印&quo…

.NET Community Toolkit 8.0.0 版本发布

.NET 社区工具包&#xff08;.NET Community Toolkit &#xff09;现已发布 8.0.0 版&#xff01;.NET 社区工具包是一组适用于所有 .NET 开发人员&#xff0c;且与任何特定 UI 平台无关的帮助程序和 API。该工具包由 Microsoft 维护和发布&#xff0c;是 .NET 基金会的一部分&…

1、内存

程序为什么需要内存 程序运行的目的&#xff1a;程序运行是为了得到一定的结果&#xff0c;程序运行其实是在做一系列的数据计算&#xff0c;所以&#xff1a;程序代码数据&#xff1b;程序运行的目的不外乎2个&#xff1a;过程、结果&#xff1b; 用函数来类比&#xff1a;…

基于CAP组件实现补偿事务与幂等性保障

【.NET Core】| 总结/Edison Zhou1补偿事务和幂等性在微服务架构下&#xff0c;我们会采用异步通信来对各个微服务进行解耦&#xff0c;从而我们会用到消息中间件来传递各个消息。 补偿事务某些情况下&#xff0c;消费者需要返回值以告诉发布者执行结果&#xff0c;以便于发布者…

Docker与k8s

前言 随着k8s 作为容器编排解决方案变得越来越流行&#xff0c;有些人开始拿 Docker 和 k8s进行对比&#xff0c;不禁问道&#xff1a;Docker 不香吗&#xff1f; k8s 是kubernets的缩写&#xff0c;’8‘代表中间的八个字符。 其实 Docker 和 k8s 并非直接的竞争对手&#xff…

Linux下启动tomcat报java.lang.OutOfMemoryError: PermGen space

2019独角兽企业重金招聘Python工程师标准>>> 一、错误信息 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav…

Redis安装[Windows]

一. redis下载地址: https://github.com/ServiceStack/redis-windows/tree/master/downloads 根据需要的下载对应版本*.zip即可.(我这里是win7x64) 二.使用 1. 下载之后解压到你相应的目录下: 1 文件介绍&#xff1a; 2 redis-benchmark.exe #基准测试 3 redis-check-aof.e…

简练软考知识点整理-项目启动过程组

启动过程组包含定义一个新项目或现有项目的一个新阶段&#xff0c;授权开始该项目或阶段的一组过程。在启动过程中&#xff0c;定义初步范围和落实初步财务资源&#xff0c;识别那些将相互作用并影响项目总体结果的内外部干系人&#xff0c;选定项目经理&#xff08;如果尚未安…

Paxos算法详解

Paxos、Raft分布式一致性算法应用场景一文讲述了分布式一致性问题与分布式一致性算法的典型应用场景。作为分布式一致性代名词的Paxos算法号称是最难理解的算法。本文试图用通俗易懂的语言讲述Paxos算法。 一、Paxos算法背景 Paxos算法是Lamport宗师提出的一种基于消息传递的分…

Teiid:数据虚拟化Data Virtualization平台

2019独角兽企业重金招聘Python工程师标准>>> Teiid介绍 http://teiid.jboss.org/ 数据虚拟化的定义 https://en.wikipedia.org/wiki/Data_virtualization http://www.denodo.com/en/data-virtualization/overview 数据虚拟化的文章 Sick of ETL? Database virtuali…

如何仿造一个websocket请求?

之前两次singnalr、 websocket实时推送相关&#xff1a;• .NET WebSockets 核心原理初体验[1]• SignalR 从开发到生产部署避坑指南[2]tag&#xff1a;浏览器--->nginx--> server其中提到nginx默认不会为客户端转发Upgrade、Connection标头&#xff0c; 因为为了让被代理…

从“互联网+教育”到“教育+互联网”——互联网文化基因视域下的审思

作者信息 朱敬/广西师范大学教育学部教授&#xff0c;教育学博士&#xff0c;博士生导师&#xff1b; 蔡建东/河南大学教育学部教授&#xff0c;教育学博士。 本文摘要 近年来国务院与教育部文件逐渐使用“教育互联网”一词&#xff0c;从“互联网教育”到“教育互联网”&a…

Axure RP使用攻略--动态面板的用途(8)

写了几个Axure教程之后发现&#xff0c;可能教程的起点有些高了&#xff0c;过分的去讲效果的实现&#xff0c;而忽略了axure功能以及基础元件的使用&#xff0c;那么从这个教程开始&#xff0c;把这些逐渐的展开讲解。 关于动态面板 动态面板是axure原型制作中使用非常频繁的一…

ABP 6.0.0-rc.1的新特性

2022-07-26官方发布ABP 6.0.0-rc.1版本&#xff0c;本文挑选了几个新特性进行了介绍&#xff0c;主要包括LeptonX Lite默认主题、OpenIddict模块&#xff0c;以及如何将Identity Server迁移到OpenIddict。据ABP官方公众号介绍&#xff0c;ABP 6.0.0稳定版的计划发布日期为2022-…

Java并发包--线程池框架

转载请注明出处&#xff1a;http://www.cnblogs.com/skywang12345/p/3509903.html 线程池架构图 线程池的架构图如下&#xff1a; 1. Executor 它是"执行者"接口&#xff0c;它是来执行任务的。准确的说&#xff0c;Executor提供了execute()接口来执行已提交的 Runna…

c 试水解码jpeg图片比特流(已成功解码)

找到一张采用霍夫曼通用DC,AC编码表的图片&#xff0c;提取出此图片的比特流准备对它解码&#xff0c;再反推怎样编码。 下图是此图片比特流前100个字节。解码是每次读一字节&#xff0c;对这8比特解码&#xff0c;如8比特不能解码&#xff0c;再读入一字节。因为霍夫曼表最多…

Raft算法详解

Raft算法属于Multi-Paxos算法&#xff0c;它是在Multi-Paxos思想的基础上&#xff0c;做了一些简化和限制&#xff0c;比如增加了日志必须是连续的&#xff0c;只支持领导者、跟随者和候选人三种状态&#xff0c;在理解和算法实现上都相对容易许多 从本质上说&#xff0c;Raft算…

淘宝弹性布局方案lib-flexible研究

1. lib-flexible不能与响应式布局兼容 先说说响应式布局的一些基本认识&#xff1a; 响应式布局的表现是&#xff1a;网页通过css媒介查询判断可视区域的宽度&#xff0c;在不同的范围应用不同的样式&#xff0c;以便在不同尺寸的设备上呈现最佳的界面效果。典型的例子是&#…

WPF效果第一百九十四篇之伸缩面板

前面一篇玩耍了一下登录实现效果;今天在原来的基础上来玩耍一下伸缩面板的效果;闲话不多扯直接看效果:1、关于前台简单布局:2、左侧面板伸缩动画&#xff1a;<Storyboard x:Key"ShowConfigSb"><ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty…

【.NET 6】开发minimal api以及依赖注入的实现和代码演示

前言&#xff1a;.net 6 LTS版本发布已经有一段时间了。此处做一个关于使用.net 6 开发精简版webapi&#xff08;minimal api&#xff09;的入门教程演示。1、新建一个项目。此处就命名为 SomeExample:2、选择 .net6版本&#xff0c;并且此处先去掉HTTPS配置以及去掉使用控制器…