textbox wpf 居中_C# + WPF: TextBox中的光标定位问题

在C#的WPF应用中,限制TextBox输入字节数时遇到光标位置异常问题。当输入超过10字节后,删除最后一个双字节字符会导致光标移至开头。解决方案是,在删除后重新让TextBox获得焦点,以保持光标在末尾。讨论中提到了可能的样式限制和编码问题,但最终解决方案是确保TextBox在内容改变后仍然保持焦点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人要限制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中的光标定位问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值