我想请教一下C#高手门,我的问题是这样的,我想在一个textBox中输入一连串的文本,在我输入的过程中实现输入5个字符就自动加一个空格,比如,我在键盘上按下236521235,在textbox中显示2365 2123 5,怎么实现,还有,就是我要输错了,想把光标往前移动一下,删了一个字符,后面的字符仍然按原来的规律排列,还是上面的一串,比如我把光标移到2365后,再插入一个0,刚变为2365 0212 35,怎么实现,要求没有明显的闪屏,我以前用的方法是把内容取出来再写一次,但字符一多,处理速度慢得要命,想求一个最优方法,不写代码写写思想也行,先谢谢了。
//在textBox的textchanged事件中:
string str="1232133423242";
str=string.Join(" ",Regex.Split(str,"(?<=\\G\\d{4})"));
Console.WriteLine(str); //1232 1334 2324 2
{
if (textBox1.Text.Length == 4)
{
textBox1.AppendText(" ");
}
if ((textBox1.Text.Length)==9)
{
textBox1.AppendText(" ");
}
}接下来自己想把发控制那个数字就行了,
如果光标在文本中间的则记录光标所在位置索引sidx..sidx%5得到光标在该分段的索引tidx
然后(textBox1.TextLength-sidx+tidx)/5就能得到从光标所在位置到文本末尾的分段数,
按分段数循环删除空格所在并且在空格所在索引向前移动一个单位添加一个空格..,
没有测试过..不晓得能不能符合你的需求...如果此逻辑有错误..也请指出...
this.textBox1.KeyUp += (sender, e) =>
{
this.textBox1.Text = System.Text.RegularExpressions.Regex.Replace(this.textBox1.Text.Replace(" ", ""), @"[^\s]{4}", "$0 ");
this.textBox1.SelectionStart = this.textBox1.Text.Length;
};写在你的Form的构造函数或Form_load事件里