限制 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;
}
刚才有人回复了这个函数,确实可以监测出来字节数目,但是超过了怎么限制当前输入的字为无效输入呢?
设置MaxLength属性 不可能办到。public static bool OutOfLength(string str,int len)
{
byte[] bt = System.Text.Encoding.Default .GetBytes (str.Trim ());
return bt.Length>len;
}
刚才有人回复了这个函数,确实可以监测出来字节数目,但是超过了怎么限制当前输入的字为无效输入呢?
或者使用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>
{
byte[] bt = System.Text.Encoding.Default .GetBytes (str.Trim ());
return bt.Length>len;
}
刚才有人回复了这个函数,确实可以监测出来字节数目,但是超过了怎么限制当前输入的字为无效输入呢?
是置空还是自动截取前面六个字节的呢
你在提交的时候,做一个校验,如果发现超长了,那么弹出一个对话框给以提示不就可以了吗?如果你想在输入的时候就进行控制,你需要在TextChanged事件里做处理。
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;
}
}