目录
前言
最近一直在优化TextBox,这个控件用的很普遍,用法也特别的多,最近用的最多的是一个清空,还有就是限制文本框的输入字符。【此处清空加一个Combox控件,在运用这个控件的时候,如果下拉框添加了过多的内容的话,那就可能显示出来的十好几条,导致整个窗体可能都是这个下拉框,这样就会很难看,此时就需要对下拉框显示个数进行一下设置,保证美观。】
实践
-
清空文本框
任何难题的的敌人都是实践,花时间去实践,任何问题都是so easy的。清空文本框我们可能就就是运用一下的代码
public void Btnclear_Click(object sender,EventArgs e)
{
txtcard.text=""; txtuserid.text=""
cb.age.text="";
}
以上方法对于少数的,一个窗体中如果有一两个或者三四个的文本框是=时比较方便,但是如果一个窗体上有十几个文本框需要清空的话,这样就很麻烦了,还很有可能会漏掉几个没有清空,多次调试,浪费时间。那么有没有想过有一种方法可以同时清除呢?接下来给你提供代码了【运用foreach方法,遍历整个窗体或者某个文本框中的文本框或者下拉框控件,进行删除就真的so easy了,绝对不会落下某一个控件,相信计算机的搜索能力】:
private void BtnClean_Click(object sender, EventArgs e)
{
//清空窗体文本框
foreach (Control control in this.Controls)
{
if (control is TextBox || control is ComboBox)
{
control.Text = "";
}
}
//清空容器内文本框
foreach (Control control in gb1.Controls)
{
if (control is TextBox ||control is ComboBox)
{
control.Text = "";
}
}
}
-
限制文本框的输入
1. 这种问题无论是在VB还是C#还是以后的语言中,限制字符的输入是必不可少的,非常简单的一个方法就是:建一个限制的类,比如Impose类,里面有限制只能输入数字的方法,只能输入汉字和字母的方法、只能输入字母和数字的方法,窗体中需要的时候,直接调用法即可:Impose.setNumber(e);
using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace UI
{
public partial class Impose
{
/// <summary>
/// 限制只可输入数字
/// </summary>
/// <param name="e"></param>
public static void setNumber(KeyPressEventArgs e)
{
//IsDigit 判断的是十进制数字,就是 '0 '..'9 '。
if (e.KeyChar != '\b' && !Char.IsDigit(e.KeyChar))//\b是退格键
{
e.Handled = true;
MessageBox.Show("请输入数字", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}
/// <summary>
/// 限制只能输入汉字或字母
/// </summary>
/// <param name="c"></param>
public static void setChinese(KeyPressEventArgs e)
{
Regex rg = new Regex(@"^[\u4e00-\u9fa5a-zA-Z\b]+$");
if (!rg.IsMatch(e.KeyChar.ToString()))
{
e.Handled = true;
MessageBox.Show("只能输入汉字或字母!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}
/// <summary>
/// 只能输入字母或数字
/// </summary>
/// <param name="e"></param>
public static void setEnglishOrNum(KeyPressEventArgs e)
{
if ((e.KeyChar >= 'a' && e.KeyChar <= 'z') || (e.KeyChar >= 'A' && e.KeyChar <= 'Z')
|| (e.KeyChar >= '0' && e.KeyChar <= '9') || (e.KeyChar == 8))
{
e.Handled = false;
}
else
{
e.Handled = true;
MessageBox.Show("密码只能是字母或者数字!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}
}
}
2.今天对邮箱的设置时候,遇到一个问题,那就是如何不能输入汉字,可以只限制汉字,这种方法和上面限制一样,但是可以运用其他的方法,那就是如果输入汉字,怎样才能转换为英文 ,于是开始进行探索。记得看过一个视频,上面有过讲解,进行一次复习,然后出现了一下的代码。
【注:此种方法需要安装一个类库【类库地址】,安装第一个,然后引用以下第二章图片两个,】
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.ObjectModel;
using Microsoft.International.Converters.PinYinConverter;
namespace UI
{
public partial class GetPinyin
{
public static string Pinyin(string s1)
{
string s2 = "";
foreach (char c in s1)
{
ChineseChar cc = new ChineseChar(c);
//s2 += cc.Pinyins[0] 显示拼音和声调
// s2 += cc.Pinyins[0][0] 显示拼音首字母
//显示拼音,此时是小写【如果没有ToLower则是大写】
s2 += cc.Pinyins[0].Substring(0,cc.Pinyins[0].Length-1).ToLower();
}
return s2;
}
}
}
此种用法有点限制,那就是只能判断第一个输入汉字,然后转为拼音,然后下一个调用的时候会调用转换的字母,进而会出错。【如果你用的话没有错,希望可以指导一下】。
3.第三种方法是我感觉比较常见的一种方式,那就是设置文本框获取焦点的时候,属性修改为只输入英文【除非修改】,不能输入汉字, 此时涉及到TextBox文本框中的一个新的属性:textBox.ImeMode;查完此属性才知道功能如此强大,我们在点击输入密码的时候,会直接显示输入英文,其实就是对此属性的设置。
图片引用连接
使用此属性尽量和文本框的Click事件结合使用,点击文本框时更改属性:
-
设置文本框中无内容是显示灰色提示:
此想法来自于师傅的意见,在进行重构一遍验收的时候,在输入卡号的时候如果没有输入数字的话就会提示输入数字,输错一次提示一次,这样可能会给用户带来烦躁感,于是就提出可以限制文本框的输入长度,在文本框内显示灰色的文本提示输入数字,这样的话那么只要是认识字的那就应该不会去输入其他的东西了。
这种方式主要用到了两个新的事件方法:Enter和Leave事件。
Enter:当控件是窗体的活动控件时发生
Leave:当控件不再是窗体的活动控件时发生
private void txtRecharge_Enter(object sender, EventArgs e)
{
if (txtRecharge.Text == "[请输入充值金额]")
{
txtRecharge.Text = "";
}
}
private void txtRecharge_Leave(object sender, EventArgs e)
{
if (txtRecharge.Text == "")
{
txtRecharge.Text = "[请输入充值金额]";
//文本框内字体的颜色(灰色)
txtRecharge.ForeColor = Color.Gray;
}
}
运行结果:
-
限制下拉框的显示条数
此设置只需要更改一个属性即可完成:MaxDropDownItems 想要显示几条就改为几条就可以了
。
设置datagridview某一行显示格式为“*”
//查询用户使密码列显示为“*“号
private void dgvList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 1)
{
if (e.Value != null && e.Value.ToString().Length > 0)
{
e.Value = new string('*', e.Value.ToString().Length);
}
}
}
遇到问题就去查,花时间攻克,收获就会很多。