【问题标题】:How to highliht specific word in richtextbox during writing?如何在写作过程中突出显示richtextbox中的特定单词?
【发布时间】:2020-03-21 11:22:33
【问题描述】:

基本上我想为我的语言进行自动更正。我有一个 RichTextBox(名称:MainText),我在其中写作。在编写过程中,如果每个单词都存在于字典文件中,程序就会对其进行处理。如果不是,则将特定单词颜色更改为红色。 它有一个计时器。每秒后,它会获取书面文本并将单词放入 str 数组,并从 dictionary.txt 文件中读取正确的单词并将它们放入列表中。在比较字符串期间,它从不突出显示不正确的单词,并且总是出现 indexOutOfRange 错误。如何解决?

这里是计时器滴答作废:

void CheckTimer_Tick(object sender, EventArgs e)
    {
        List<string> correct_words = File.ReadAllLines(DictPath).ToList();
        string text = MainText.Text;
        string[] Words = text.Split(' ', '.');

        for (int i = 0; i < Words.Length; i++)
        {
            if (correct_words.Contains(Words[i])) { }
            else
            {
                int index = 0;
                String temp = MainText.Text;
                MainText.Text = "";
                MainText.Text = temp;

                while (index < MainText.Text.LastIndexOf(Words[i]))
                {
                    MainText.Find(Words[i], index, MainText.TextLength, RichTextBoxFinds.None);
                    MainText.SelectionColor = Color.Red;
                    index = MainText.Text.IndexOf(Words[i], index) + 1;
                }

            }
        }

    }

我也试过这个 void:

void HighlightPhrase(RichTextBox box, string phrase, Color color)
    {
        int pos = box.SelectionStart;
        string s = box.Text;

        for (int ix = 0; ;)
        {
            int jx = s.IndexOf(phrase, ix, StringComparison.CurrentCultureIgnoreCase);
            if (jx < 0) break;
            box.SelectionStart = jx;
            box.SelectionLength = phrase.Length;
            box.SelectionColor = color;
            ix = jx + 1;
        }
        box.SelectionStart = pos;
        box.SelectionLength = 0;
        box.ForeColor = Color.Black;
    }

如果我给它一个特定的字符串,这会起作用,但它无法识别字典中的短语输入并给出 indexOutOfRange 错误。

【问题讨论】:

  • 您是否尝试拆分字符串并逐字检查?

标签: c# winforms


【解决方案1】:
     public Form1()    
     {    
          InitializeComponent();    
      }    

      private void textbox1_TextChanging(object sender, EventArgs e)    
      {    
         string[] words = textBox1.Text.Split(',');    
         foreach(string word in words)    
         {    
             int startindex = 0;    
             while(startindex < richTextBox1.TextLength)    
             {    
                 int wordstartIndex = richTextBox1.Find(word, startindex, RichTextBoxFinds.None);    
                 if (wordstartIndex != -1)    
                 {    
                     richTextBox1.SelectionStart = wordstartIndex;    
                     richTextBox1.SelectionLength = word.Length;    
                     richTextBox1.SelectionBackColor = Color.Yellow;    
                 }    
                 else    
                     break;    
                 startindex += wordstartIndex + word.Length;    
             }    
         }    
     }          

【讨论】:

  • 请至少简要说明这段代码的作用以及它如何解决问题中的问题。仅发布代码块不被认为是一种好习惯。
  • 您的空白标记了在字典文件中找到的所有正确单词。如何让它标记所有拼写错误的单词。
  • 这个是为了做高光
【解决方案2】:

为了清晰的突出显示使用此代码

         richTextBox1.SelectionStart = 0;    
         richTextBox1.SelectAll();    
         richTextBox1.SelectionBackColor = Color.White;    

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 2018-02-16
    • 2020-10-11
    • 1970-01-01
    • 2012-01-29
    • 2018-02-08
    • 2019-06-24
    • 2010-11-27
    • 1970-01-01
    相关资源
    最近更新 更多