当前位置: 代码迷 >> C# >> C# + WPF: TextBox中的光标定位有关问题
  详细解决方案

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

热度:99   发布时间:2016-05-05 03:33:38.0
C# + WPF: TextBox中的光标定位问题
我要限制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 一下试试
------解决思路----------------------
引用:
Quote: 引用:

你 再 让它本身Focus 一下试试

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

双字节 你输入的是什么??
------解决思路----------------------
引用:
Quote: 引用:

双字节 你输入的是什么??

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

亲测,我这没有问题,双字节依旧是没有输入。  是不是有什么样式限制?
------解决思路----------------------
引用:
Quote: 引用:

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

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

不会。你看看  是不是那个地方设置了什么样式?
------解决思路----------------------
return System.Text.Encoding.Default.GetBytes(str).Length;
跟编码有关吧?ANSI标准跟你当前的语言设置有关,如果是中文(GB2312编码)就没问题
  相关解决方案