【问题标题】:RichTextBox Regex ErrorRichTextBox 正则表达式错误
【发布时间】:2013-11-26 10:26:26
【问题描述】:

我正在尝试使用Regex 突出显示我的RichTextBox RTB 中的数字,它工作正常,除了当我按下将插入符号位置移动到我所在的位置上方时,它会选择下面的内容,当我输入,它消失了,除非我一直按左键,这真的很麻烦。

代码:

MyRegex.cs

namespace REGEX_MY
{
    public class REGEX_CLASS
    {
        public static RichTextBox HIGHLIGHT(RichTextBox RTB, int StartPos)
        {
            Regex Red = new Regex("1|2|3|4|5|6|7|8|9|0");
            RTB.SelectAll();
            RTB.SelectionColor = Color.White;
            RTB.Select(RTB.Text.Length, 1);

            foreach (Match Match in Red.Matches(RTB.Text))
            {
                RTB.Select(Match.Index, Match.Length);
                RTB.SelectionColor = Color.Blue;
                RTB.SelectionStart = StartPos;
                RTB.SelectionColor = Color.White;
            }
            return RTB;
        }
    }          
}

MyForm.cs

public void DoIt()
{
    RTB = REGEX_MY.REGEX_CLASS.HIGHLIGHT(RTB, RTB.SelectionStart);
}

谢谢:)

【问题讨论】:

    标签: c# regex richtextbox


    【解决方案1】:

    RTB.Select(Match.Index, Match.Length) in foreach 语句在匹配的数字上跳过长度为 1 的选择。当它完成时,它会将选择保留在最后一个匹配的数字上,并且当您按任意键时,选择不会消失,但光标会向前移动,因此下一个字符会被覆盖。

    解决方案是在foreach 语句完成之后 将光标带回到没有选择范围的起始位置,就像这样RTB.Select(StartPos, 0)

    foreach (Match Match in Red.Matches(RTB.Text))
    {
        RTB.Select(Match.Index, Match.Length);
        RTB.SelectionColor = Color.Blue;
        RTB.SelectionStart = StartPos;
        RTB.SelectionColor = Color.White;
     }
     RTB.Select(StartPos, 0);
     return RTB;
    

    【讨论】:

    • 一个简单的问题 - 每当我做某事 [type] 时它都会一直闪烁。有没有办法阻止这种情况发生?
    • 它减少了闪烁的数量,但仍然没有消除它。我正在使用多个正则表达式语句。能解决吗?
    • 我猜这是在RTB.Select(Match.Index, Match.Length) 中进行选择时重绘控件的效果。我不知道您是否可以在 foreach 语句正在执行时阻止控件被重绘。我应该调查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多