C# Windows Form下的控件的Validator(数据验证)

由于偶尔的一个想法,谋生了一个做一个windows form下的Validator控件,或者直接说类吧!

因为webform下的Validator控件太好用了。哈哈,直接看代码!

 

下面这个类,主要是一个简单的验证类,不过只是起到一个抛砖引玉的作用,其他的功能,大家发挥想象吧!

  1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows.Forms;
6
7 namespace FinanceManager.Code
8 {
9 /// <summary>
10 /// 输入验证类
11 /// </summary>
12 public class Validator
13 {
14 /// <summary>
15 /// 判断指定文本框内容是否满足条件
16 /// </summary>
17 /// <param name="textBox">需要验证的文本框</param>
18 /// <param name="type">指定验证类型</param>
19 /// <param name="LabelDisplayError">需要显示错误的标签</param>
20 /// <param name="lenth">用于验证文本框内字符的长度</param>
21 /// <returns>满足条件返回True,不满足条件返回False</returns>
22 public static Boolean ValidTextBox(TextBox textBox, ValidType type, Label LabelDisplayError, Int32 lenth = 10)
23 {
24 if (LabelDisplayError == null)
25 {
26 return ValidTextBox(textBox, type, lenth);
27 }
28 else
29 {
30 if (!ValidTextBox(textBox, type, lenth))
31 {
32 LabelDisplayError.Visible = true;
33 return ValidTextBox(textBox, type, lenth);
34 }
35 else
36 {
37 LabelDisplayError.Visible = false;
38 return ValidTextBox(textBox, type, lenth);
39 }
40 }
41 }
42 /// <summary>
43 /// 判断指定文本框内容是否满足条件
44 /// </summary>
45 /// <param name="textBox">需要验证的文本框</param>
46 /// <param name="type">指定验证类型</param>
47 /// <param name="lenth">用于验证文本框内字符的长度</param>
48 /// <returns>满足条件返回True,不满足条件返回False</returns>
49 public static Boolean ValidTextBox(TextBox textBox, ValidType type, Int32 lenth = 10)
50 {
51 Boolean flag = false;
52 switch (type)
53 {
54 case ValidType.Required:
55 if (!String.IsNullOrEmpty(textBox.Text.Trim()))
56 {
57 flag = true;
58 }
59 else
60 {
61 flag = false;
62 }
63 break;
64 case ValidType.CharLength:
65 if (!String.IsNullOrEmpty(textBox.Text.Trim()))
66 {
67 if (textBox.Text.Trim().Length < lenth)
68 {
69 flag = true;
70 }
71 else
72 {
73 flag = false;
74 }
75 }
76 else
77 {
78 flag = false;
79 }
80 break;
81 case ValidType.EnglishChar:
82 if (!String.IsNullOrEmpty(textBox.Text.Trim()))
83 {
84 foreach (Char c in textBox.Text.Trim().ToLower())
85 {
86 if (!(c >= 'a' && c <= 'z'))
87 {
88 flag = false;
89 }
90 }
91 flag = true;
92 }
93 else
94 {
95 flag = false;
96 }
97 break;
98 case ValidType.Number:
99 if (!String.IsNullOrEmpty(textBox.Text.Trim()))
100 {
101 Int32 i = 0;
102 if (Int32.TryParse(textBox.Text.Trim(), out i))
103 {
104 flag = true;
105 }
106 else
107 {
108 flag = false;
109 }
110 }
111 else
112 {
113 flag = false;
114 }
115 break;
116 }
117
118 return flag;
119 }
120 }
121 /// <summary>
122 /// 验证类型
123 /// </summary>
124 public enum ValidType
125 {
126 /// <summary>
127 /// 表示必须填写的项
128 /// </summary>
129 Required,
130 /// <summary>
131 /// 表示必须为数字的项
132 /// </summary>
133 Number,
134 /// <summary>
135 /// 表示必须为英文字符的项
136 /// </summary>
137 EnglishChar,
138 /// <summary>
139 /// 表示必须为指定长度的项
140 /// </summary>
141 CharLength
142 }
143 }


那么,我就在用户登录的地方用到了,这个代码、

看看我的界面:

控件布局就这样吧,主要是为了验证我们的功能!(后面童鞋,别拿鸡蛋砸我~)

我设置的是:用户名和密码必填,现在我为了测试,我直接点击“用户登录”按钮,出现以下界面:

怎么样?看见用户名后面那个星号了吧?顺眼吧!跟webform下的validator差不多吧!呵呵,我填写用户名,不写密码看看,如何?

呵呵,貌似很管用,现在我们看看后台代码、

 1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9 using FinanceManager.Code; //引用上面验证类
10
11 namespace FinanceManager
12 {
13 public partial class frmLogin : Form
14 {
15 public frmLogin()
16 {
17 InitializeComponent();
18 }
19
20 private void button1_Click(object sender, EventArgs e)
21 {
22 if (!Validator.ValidTextBox(txtUserName, ValidType.Required, lblErrorName))
23 {
24 MessageBox.Show("用户名必填,请输入用户名!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
25 txtUserName.Focus();
26 }
27 else if (!Validator.ValidTextBox(txtPassword, ValidType.Required, lblErrorPassword))
28 {
29 MessageBox.Show("密码必填,请输入用户密码!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
30 txtPassword.Focus();
31 }
32 else
33 {
34 MessageBox.Show("恭喜您,登录成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
35 frmMain main = new frmMain();
36 main.Show();
37 this.Hide();
38 }
39 }
40 }
41 }

代码清晰易懂把!希望对大家有启发,这个还可以做成属性,也可以自己扩展textbox控件,各种各样的方法都可以实现,主要要说明的一点,大家多动脑子,多共享点代码,让我们的路走的更宽,更远!

同时,也欢迎各位关注【mrhuo工作室】,网址:http://www.mrhuo.com


 

转载于:https://www.cnblogs.com/MrHuo/archive/2012/03/06/WinformValidator.html

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

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

相关文章

七、流水查询---记录用户登录信息

一、数据库的建立 在fiber_yy数据库下创建yy_user_record表 可以先手动填入几条数据信息 初始数据库信息 username为用户账号 sex为用户注册所填写的性别 phone为用户手机号 time为用户登录该系统的时间 二、页面的设计 登录注册页面我就不演示了&#xff0c;前几篇博文…

leetcode 455. 分发饼干 思考分析

目录题目自己的思路以及AC代码参考思路题目 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并…

八、流水查询---记录纺织品出库信息

一、数据库的建立 在fiber_yy数据库下创建yy_textile_record表 可以先手动填入几条数据信息 初始数据库信息 第一条数据的username是空格不是null number为织物的品号(唯一的) stock为出货量 username为哪个账号 time为出货时间 二、页面的完善 登录注册页面我就不演示…

应用程序栏【WP7学习札记之九】

本节是WP7学习札记的第九篇&#xff0c;讲的是系统托盘和应用程序栏&#xff0c;具体内容是系统托盘和应用程序栏的介绍&#xff0c;如何分别使用C#、xaml以及Expression Blend生成应用程序栏&#xff0c;应用程序栏的透明度以及对屏幕方向改变的支持。摘要如下&#xff1a; 系…

leetcode 第 216 场周赛 整理

目录1662. 检查两个字符串数组是否相等题目自己代码5606. 具有给定数值的最小字符串题目自己代码贪心算法1664. 生成平衡数组的方案数题目自己代码动态规划优化1665. 完成所有任务的最少初始能量题目思路1662. 检查两个字符串数组是否相等 题目 给你两个字符串数组 word1 和 …

九、忘记密码功能的实现

一、页面设计 login页面&#xff0c;和第二篇博文(用户登录和注册)页面基本一样&#xff0c;只不过多了一个按钮 其中忘记密码&#xff1f;点我找回 为button3 retrieve_password页面 change_password页面 页面如下&#xff1a; 二、数据库 因为是忘记密码&#xff0c;…

Android中对手机文件进行读写

参考张泽华视频 &#xff08;一&#xff09;读写手机内存卡中的文件 对手机中的文件进行读写操作&#xff0c;或者新增一个文件时&#xff0c;可直接使用openFileOutput / openFileInput 得到文件的输出、输入流。 FileOutputStream fos this.openFileOutput("private.…

联轴器选型_联轴器| 软件工程

联轴器选型耦合 (Coupling) In general terms, the term coupling is defined as a thing that joins together two objects. If we talk about software development, then the term coupling is related to the connection between two modules, i.e. how tight interaction …

剑指 Offer 10- I. 斐波那契数列 (从重叠子问题到备忘录到dp数组迭代解法)

目录题目描述1、暴力递归法的重叠子问题2、备忘录解法3、dp数组迭代算法4、滚动数组优化5、参考链接题目描述 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项。斐波那契数列的定义如下&#xff1a; F(0) 0, F(1) 1 F…

十、纺织品库存管理系统全部功能展示

一、系统主页面—Form1 系统运行加载页面&#xff0c;主要包含三个功能&#xff0c;①登录、②注册、③退出系统 程序运行图&#xff1a; 登录功能&#xff0c;跳转到登录页面 注册功能&#xff0c;跳转到注册页面 退出系统&#xff0c;程序结束运行 代码如下&#xff1a; …

leetcode 376. 摆动序列 思考分析

目录题目思路分析代码总结题目 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为摆动序列。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。少于两个元素的序列也是摆动序列。 例如&#xff0c; [1,7,4,9,2,5] 是一个摆动序列&am…

[EF在VS2010中应用Entity framework与MySQL

在VS2010中应用Entity framework与MySQL 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议本文讲述了在VS2010中使用EF与MySQL的一个简单示例。 工具安装&#xff1a; 1&#xff0c;MySQL MySQL Community Server Connector/NET 6…

十、美化界面

一、背景图片 二、透明化处理 BackColor—web—Transparent 三、数据库建表语句 数据库 USE [fiber_yy] GO /****** Object: Table [dbo].[yy_user_record] Script Date: 06/20/2022 18:54:48 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADD…

VS 如何修改C++编译标准

第一步&#xff0c;打开项目资源管理器的属性页面 第二步&#xff0c;选择配置属性->C/C>语言->C语言标准 第三步&#xff0c;选择合适的标准&#xff0c;一般来说选最新即可

十一、纺织面料下架功能的实现

一、数据库 数据库仍用yy_textile表&#xff0c;前几篇博文都叙述过这里就不再叙述 在fiber_yy数据库下创建yy_textile表 初始数据库信息 二、页面 admin_undercarriage 三、代码实现 admin_undercarriage using System; using System.IO; using System.Data; using S…

svg和canvas的应用场景分析【转载】

原文地址&#xff1a;http://blogs.msdn.com/b/weizhong/archive/2011/07/16/canvas-svg.aspx 思考什么时候使用Canvas 和SVG wzhong 15 Jul 2011 9:07 PM 0HTML5 Canvas 和 SVG 是 IE9 中引入的两项令人激动的图形功能。上周在拉斯维加斯举办的 MIX11 大会对这两个功能进行了介…

【C++grammar】文件系统以及path类使用

目录1.文件系统概述1、关于路径2、如何将某个路径下的所有文件递归地找出来&#xff1f;2.路径类及操作1、path类的成员函数2、path类的非成员函数示例1&#xff1a;展示C17中的path对象的用法示例2&#xff1a;展示Path类中用于分解路径成分的函数示例3&#xff1a;展示path相…

十二、所有功能实现效果演示

一、系统项目架构 Ⅰ&#xff0c;fiber_yy数据库下有五张表 yy_admin&#xff1a;管理员登录账号和密码 yy_textile&#xff1a;纺织面料数据信息 yy_textile_record&#xff1a;用户购买纺织面料信息所存储的面料流水信息 yy_user&#xff1a;用户登录注册信息 yy_user_reco…

leetcode 322. 零钱兑换 思考分析

目录1、题目2、思路分析3、参考链接1、题目 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1。 你可以认为每种硬币的数量是无限的。 提示&#xff1a; 1 …

二、训练fashion_mnist数据集

一、加载fashion_mnist数据集 fashion_mnist数据集中数据为28*28大小的10分类衣物数据集 其中训练集60000张&#xff0c;测试集10000张 from tensorflow import keras import tensorflow as tf import matplotlib.pyplot as plt import numpy as npfashion_mnist keras.data…