背景:本人在RichTextBox控件的TextChanged事件里对录入的内容进行了处理,处理完后又重新
richTextBox.Document.Blocks.Add(phSource); Add到RichTextBox的Document里。
在这个过程中本人遇到了两个比较头疼的问题
问题1:例如现在文本框里有:abc123yyyyyyy2 当本人光标放在123后面进行输入的时候输入一个字符光标就自动跳到最后面的yyy2处了(原因是本人在TextChanged处理文本框里的内容然后又重新赋值了)问题是怎么能让光标在123后的位置输入新内容后光标还停留在输入内容的后面啊。以下是本人TextChanged的代码。
private void richTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
this.richTextBox.TextChanged -= new TextChangedEventHandler(richTextBox_TextChanged);
TextPointer tpStart = richTextBox.CaretPosition;
//对文本框内容的处理函数
this.UpdateSourceContent(cbType.IsChecked == null ? true : cbType.IsChecked.Value);
this.richTextBox.TextChanged += new TextChangedEventHandler(richTextBox_TextChanged);
tpStart = tpStart.DocumentEnd;
richTextBox.CaretPosition = tpStart;
}
问题2:在当前输入法是中文输入法的时候打第一个字母就触发TextChanged事件了~正常吗?怎么不让他触发而是等某个汉字或词语打完到文本框时才触发呢
跪求高手解答~~~
richTextBox.Document.Blocks.Add(phSource); Add到RichTextBox的Document里。
在这个过程中本人遇到了两个比较头疼的问题
问题1:例如现在文本框里有:abc123yyyyyyy2 当本人光标放在123后面进行输入的时候输入一个字符光标就自动跳到最后面的yyy2处了(原因是本人在TextChanged处理文本框里的内容然后又重新赋值了)问题是怎么能让光标在123后的位置输入新内容后光标还停留在输入内容的后面啊。以下是本人TextChanged的代码。
private void richTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
this.richTextBox.TextChanged -= new TextChangedEventHandler(richTextBox_TextChanged);
TextPointer tpStart = richTextBox.CaretPosition;
//对文本框内容的处理函数
this.UpdateSourceContent(cbType.IsChecked == null ? true : cbType.IsChecked.Value);
this.richTextBox.TextChanged += new TextChangedEventHandler(richTextBox_TextChanged);
tpStart = tpStart.DocumentEnd;
richTextBox.CaretPosition = tpStart;
}
问题2:在当前输入法是中文输入法的时候打第一个字母就触发TextChanged事件了~正常吗?怎么不让他触发而是等某个汉字或词语打完到文本框时才触发呢
跪求高手解答~~~
解决方案
20
问题1:尽量不要在TextChanged里面去修改Text的内容,你的修改可能会再次出发TextChanged事件,可能会导致意外的问题。至于想要光标在上次输入的地方,很简单,在TextChanged的事件参数里面有Changes属性,一般取第一个元素,从里面可以获得发生改变的位置,然后根据AddLength或RemoveLength确定是增加了还是减少了计算出当前光标的位置,然后用设置richtextbox.SelectionStar到这个位置就可以了。
问题2:这个应该是输入法的问题
问题2:这个应该是输入法的问题