C# + WPF: TextBox中的光标定位问题

.Net技术 码拜 9年前 (2016-05-17) 2775次浏览
本人要限制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字节之后,再输入一个双字节字符时,最后输入的这个双字节字符虽被删掉了,但光标却跑到了最前面。本人希望的结果是,光标不跑,还在最后面。
请大家帮看看,问题出在哪里?
(假如最后输入的这个单字节字符,就没有问题,光标不会跑)
解决方案

10

引用:

发了一天了,怎么没一个人回复呀?大家踊跃来参与呀。

你 再 让它本身Focus 一下试试

10

引用:
Quote: 引用:

你 再 让它本身Focus 一下试试

刚刚试了一下,还是不行。 (终于有人回复了,本人还以为本人的帐号出问题了呢)

双字节 你输入的是什么?

10

引用:
Quote: 引用:

双字节 你输入的是什么?

随便什么汉字。
例如说,现在已经有10个字节了,本人还要输入一个”大”字,本人刚敲了d,光标就跑到最前面了。

亲测,本人这没有问题,双字节依旧是没有输入。  是不是有什么样式限制?

10

引用:
Quote: 引用:

亲测,本人这没有问题,双字节依旧是没有输入。  是不是有什么样式限制?

你那里,光标不会跑到最前面吗?

不会。你看看  是不是那个地方设置了什么样式?

10

return System.Text.Encoding.Default.GetBytes(str).Length;
跟编码有关吧?ANSI标准跟你当前的语言设置有关,假如是中文(GB2312编码)就没问题

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C# + WPF: TextBox中的光标定位问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)