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.pswp.cn/news/283936.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283936.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283936.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java多線程4:synchronized鎖機制

臟讀 一個常見的概念。在多線程中&#xff0c;難免會出現在多個線程中對同一個對象的實例變量進行并發訪問的情況&#xff0c;如果不做正確的同步處理&#xff0c;那么產生的后果就是"臟讀"&#xff0c;也就是取到的數據其實是被更改過的。 按照正常來看應該打印&quo…

mysql 日期時間類型 自動轉型 及 運算

日期時間類型自動轉型 -- now()、字符串、數字轉datetime類型 create table t(dt datetime);insert into t values(now());insert into t values(2007-9-3 12:10:10);insert into t values(2007/9/3 121010);insert into t values(2007#9#3 121010);insert into t values(20079…

.NET Community Toolkit 8.0.0 版本發布

.NET 社區工具包&#xff08;.NET Community Toolkit &#xff09;現已發布 8.0.0 版&#xff01;.NET 社區工具包是一組適用于所有 .NET 開發人員&#xff0c;且與任何特定 UI 平臺無關的幫助程序和 API。該工具包由 Microsoft 維護和發布&#xff0c;是 .NET 基金會的一部分&…

SpringData JPA、Hibernate、Mybatis三者的區別

目錄 1.ORM 考慮 SpringData JPA Hibernate MyBatis 2.業務查詢的區別 Spring Data JPA Hibernate Mybatis 3.可拓展性 Spring Data JPA Hibernate Mybatis 4.對緩存 Spring Data JPA Hibernate Mybatis 5.難度性 Spring Data JPA Hibernate Mybatis 總述…

1、內存

程序為什么需要內存 程序運行的目的&#xff1a;程序運行是為了得到一定的結果&#xff0c;程序運行其實是在做一系列的數據計算&#xff0c;所以&#xff1a;程序代碼數據&#xff1b;程序運行的目的不外乎2個&#xff1a;過程、結果&#xff1b; 用函數來類比&#xff1a;…

Map 遍歷取值及jstl的取值

Map 遍歷取值及jstl的取值 學習了&#xff1a;http://blog.csdn.net/yanjiaye520/article/details/17354239 1、Java map的便利取值 Java代碼 收藏代碼 Map<String,String> map new HashMap<String,String>(); map.put("key1", "value1");…

基于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;如果尚未安…

在 ASP.NET Core 中上傳文件

簡介文件上傳是指將媒體文件&#xff08;本地文件或網絡文件&#xff09;從客戶端上傳至服務器存儲。ASP.NET Core 支持使用緩沖的模型綁定&#xff08;針對較小文件&#xff09;和無緩沖的流式傳輸&#xff08;針對較大文件&#xff09;上傳一個或多個文件。緩沖和流式傳輸是上…

Paxos算法詳解

Paxos、Raft分布式一致性算法應用場景一文講述了分布式一致性問題與分布式一致性算法的典型應用場景。作為分布式一致性代名詞的Paxos算法號稱是最難理解的算法。本文試圖用通俗易懂的語言講述Paxos算法。 一、Paxos算法背景 Paxos算法是Lamport宗師提出的一種基于消息傳遞的分…

LeetCode 322. Coin Change

原題 You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, …

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;我對Google的自動車要求太苛刻了。人無完人&#xff0c;所以Google的產品也不需要是完美的&#xff0c;只要“夠好用”就有市場。世界上有那么多糟糕的司機&#xff0c;酒后駕車的&#xff0c;開車時發短信的&#xff0c;打…

從“互聯網+教育”到“教育+互聯網”——互聯網文化基因視域下的審思

作者信息 朱敬/廣西師范大學教育學部教授&#xff0c;教育學博士&#xff0c;博士生導師&#xff1b; 蔡建東/河南大學教育學部教授&#xff0c;教育學博士。 本文摘要 近年來國務院與教育部文件逐漸使用“教育互聯網”一詞&#xff0c;從“互聯網教育”到“教育互聯網”&a…

Node.js Stream - 基礎篇

背景 在構建較復雜的系統時&#xff0c;通常將其拆解為功能獨立的若干部分。這些部分的接口遵循一定的規范&#xff0c;通過某種方式相連&#xff0c;以共同完成較復雜的任務。譬如&#xff0c;shell通過管道|連接各部分&#xff0c;其輸入輸出的規范是文本流。 在Node.js中&am…

Axure RP使用攻略--動態面板的用途(8)

寫了幾個Axure教程之后發現&#xff0c;可能教程的起點有些高了&#xff0c;過分的去講效果的實現&#xff0c;而忽略了axure功能以及基礎元件的使用&#xff0c;那么從這個教程開始&#xff0c;把這些逐漸的展開講解。 關于動態面板 動態面板是axure原型制作中使用非常頻繁的一…