我要限制TextBox中输入的字节数,是在TextChanged事件中处理的。
如果超出了,就把最后输入的内容删掉,光标位置保持不变。
代码如下:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = sender as TextBox;
TextChange[] change = new TextChange[e.Changes.Count];
e.Changes.CopyTo(change, 0);
int offset = change[0].Offset;
if (change[0].AddedLength > 0)
{
if (GetByteLength(textBox.Text) > 10)
{
textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength);
textBox.Select(offset, 0);
}
}
}
private int GetByteLength(string str)
{
return System.Text.Encoding.Default.GetBytes(str).Length;
}
问题是,当我已经输入了10字节之后,再输入一个双字节字符时,最后输入的这个双字节字符虽被删掉了,但光标却跑到了最前面。我希望的结果是,光标不跑,还在最后面。
请大家帮忙看看,问题出在哪里?
(如果最后输入的这个单字节字符,就没有问题,光标不会跑)
------解决思路----------------------
你 再 让它本身Focus 一下试试
------解决思路----------------------
双字节 你输入的是什么??
------解决思路----------------------
双字节 你输入的是什么??
随便什么汉字。
比如说,现在已经有10个字节了,我还要输入一个"大"字,我刚敲了d,光标就跑到最前面了。
亲测,我这没有问题,双字节依旧是没有输入。 是不是有什么样式限制?
------解决思路----------------------
亲测,我这没有问题,双字节依旧是没有输入。 是不是有什么样式限制?
你那里,光标不会跑到最前面吗?
不会。你看看 是不是那个地方设置了什么样式?
------解决思路----------------------
return System.Text.Encoding.Default.GetBytes(str).Length;
跟编码有关吧?ANSI标准跟你当前的语言设置有关,如果是中文(GB2312编码)就没问题