C# winform自定义TextBox控件,限制中英文字符长度
在 C# winform 中,TextBox 对待中英文长度没任何区别,即中文两个字节也当作长度1看待,给保存数据带来麻烦。为了节省空间,每个字段通常都限制长度,如果超过规定的长度,则产生异常,所以要准确判断字符的长度。当然,也可以在提交的时候判断,但用得多的情况下,每次都判断有些麻烦,把它定义成一个控件更方便,用的时候拉到窗体中即可。
在 winform 开发中,C#自定义TextBox控件的具体步骤如下:
1、右键待自定义TextBox控件的项目,依次选择“添加 → 类”,如图1所示:
图1
2、输入类文件名,如 UserTextBox,单击“添加”,则创建一个类文件。
3、添加 using System.Windows.Forms;,然后继承 TextBox 类。
4、在该类中重载 OnTextChanged 方法,然后写代码判断输入的字符长度,主要把中文和英文区别对等,一个中文长度为2,一个英文字母长度为1,代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace winform
{
public class UserTextBox : TextBox
{
protected override void OnTextChanged(EventArgs e)
{
string inputText = this.Text;
int len = ASCIIEncoding.Default.GetByteCount(inputText);
int maxLen = this.MaxLength;
//获取输入字符串的二进制数组
byte[] b = ASCIIEncoding.Default.GetBytes(inputText);
if (len > maxLen)
{
//把截取的字节数组转成字符串
this.Text = ASCIIEncoding.Default.GetString(b, 0, maxLen);
this.SelectionStart = maxLen;//把光标定位到输入字符最后
}
base.OnTextChanged(e);
}
}
}
5、生成项目,转到窗体界面,在工具箱就可以看到自定义控件了,如图2所示:
图2
6、在那里使用,把 UserTextBox 拖到窗体中或用它定义文本框对象都可以,已经完全可以准确判断中英文的长度。