程序开发 > C# > Winform > 正文

C# winform自定义TextBox控件,限制中英文字符长度

亮术网 2020-08-10 本网原创

在 C# winform 中,TextBox 对待中英文长度没任何区别,即中文两个字节也当作长度1看待,给保存数据带来麻烦。为了节省空间,每个字段通常都限制长度,如果超过规定的长度,则产生异常,所以要准确判断字符的长度。当然,也可以在提交的时候判断,但用得多的情况下,每次都判断有些麻烦,把它定义成一个控件更方便,用的时候拉到窗体中即可。

 

在 winform 开发中,C#自定义TextBox控件的具体步骤如下:

1、右键待自定义TextBox控件的项目,依次选择“添加 → 类”,如图1所示:

C# winform自定义控件

图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所示:

C#自定义TextBox

图2

6、在那里使用,把 UserTextBox 拖到窗体中或用它定义文本框对象都可以,已经完全可以准确判断中英文的长度。