限制 textbox 中的字节数,例如只能输入6个字节,也就是说,6个半角,3个全角,超过了就无法继续输入
设置MaxLength属性 不可能办到。public static bool OutOfLength(string str,int len)
{
byte[] bt = System.Text.Encoding.Default .GetBytes (str.Trim ());
return bt.Length>len;
}
刚才有人回复了这个函数,确实可以监测出来字节数目,但是超过了怎么限制当前输入的字为无效输入呢?

解决方案 »

  1.   

    http://singlepine.cnblogs.com/articles/265807.html
      

  2.   

    TextBox的属性中本身就带有这个功能,调用属性MaxLength,赋值为6,
    或者使用javascript也可以
    <script language="Javascript">  
    function isNumberString(e)
    {
    if(document.Form1.elements[e].value.length<=6)
             {
                return (true);
             }
             else
             {
                alert('超长!');
                return (false);          }
    }
    </script><asp:textbox id="test" runat="server" Font-Names="Times New Roman" BorderStyle="None" Font-Size="12px"
    Width="80px" Height="22px" onchange="return isNumberString ('test');"></asp:textbox>
      

  3.   

    public static bool OutOfLength(string str,int len)
    {
    byte[] bt = System.Text.Encoding.Default .GetBytes (str.Trim ());
    return bt.Length>len;
    }
    刚才有人回复了这个函数,确实可以监测出来字节数目,但是超过了怎么限制当前输入的字为无效输入呢?
    是置空还是自动截取前面六个字节的呢
      

  4.   

    例如 限制textbox输入12个字节,此时 textbox.text=aaa123 (全角输入),这个时候我输入‘中国’(这两个字是同时输入的,也是全角),结果还应该是textbox.text=aaa123(全角输入),这里还要注意光标的位置,不能乱了。
      

  5.   

    真傻,刚才我都跟你说了啊。
    你在提交的时候,做一个校验,如果发现超长了,那么弹出一个对话框给以提示不就可以了吗?如果你想在输入的时候就进行控制,你需要在TextChanged事件里做处理。
      

  6.   

    解决了,代码如下:
    public string  VerStr(System.Windows.Forms.TextBox textbox,int max)         
    {
    int n=0;
    string str="";
    foreach(char s in textbox.Text)
    {
    char[] c=s.ToString().ToCharArray();
    for (int i=0;i<c.Length;i++)
    {
    str=str+s.ToString();
    byte[] b=System.Text.Encoding.Unicode.GetBytes(c,i,1);
    if (b.Length==2)
    {
    if(b[1]!=0)
    n=n+2;
    else
    n++;
    }
    }
    if(n>=max)
    break;
    }
    return str;
    }private void textBox1_TextChanged(object sender, System.EventArgs e)
    {
    int m=this.textBox1.SelectionStart;
    int n=System.Text.Encoding.GetEncoding("sjis").GetByteCount(this.textBox1.Text);
    if(n>=6)
    {
    this.textBox1.Text=VerStr(this.textBox1,6);
    this.textBox1.SelectionStart=m;
    }
    }
      

  7.   

    有个一个TextChanged事件,事件中判断一下有多长,超过指定长度就把ReadOnly属性变成true