当单击彩色字符串旁边时,richtextbox会使我使用该颜色而不是黑色

本文关键字:颜色 黑色 字符串 彩色 单击 richtextbox | 更新日期: 2023-09-27 17:59:05

我使用了一个richTextBox,这样用户就可以看到他们拥有的XML文件并进行编辑。我有一些代码可以将关键字颜色更改为我指定的颜色。这是我使用的方法:

private void CheckKeyword(string word, Color color, int startIndex)
    {
        if (this.richTextBox.Text.Contains(word))
        {
            int index = -1;
            int selectStart = this.richTextBox.SelectionStart;
            while ((index = this.richTextBox.Text.IndexOf(word, (index + 1))) != -1)
            {
                this.richTextBox.Select((index + startIndex), word.Length);
                this.richTextBox.SelectionColor = color;
                this.richTextBox.Select(selectStart, 0);
                this.richTextBox.SelectionColor = Color.Black;
            }
        }
    }

问题是当我点击在彩色字符串附近,我开始输入特定的颜色。

我知道为什么会发生这种情况,但不知道如何修复。

当单击彩色字符串旁边时,richtextbox会使我使用该颜色而不是黑色

您必须确定您的光标是否在KeyDown的关键字区域内,因此请连接KeyDown事件并尝试使用此代码。我相信有一种更有效的方法可以确定你的光标是否在括号内的关键字内,但这似乎可以完成任务:

void rtb_KeyDown(object sender, KeyEventArgs e) {
  int openIndex = rtb.Text.Substring(0, rtb.SelectionStart).LastIndexOf('<');
  if (openIndex > -1) {
    int endIndex = rtb.Text.IndexOf('>', openIndex);
    if (endIndex > -1) {
      if (endIndex + 1 <= this.rtb.SelectionStart) {
        rtb.SelectionColor = Color.Black;
      } else {
        string keyWord = rtb.Text.Substring(openIndex + 1, endIndex - openIndex - 1);
        if (keyWord.IndexOfAny(new char[] { '<', '>' }) == -1) {
          this.rtb.SelectionColor = Color.Blue;
        } else {
          this.rtb.SelectionColor = Color.Black;
        }
      }
    } else {
      this.rtb.SelectionColor = Color.Black;
    }
  } else {
    this.rtb.SelectionColor = Color.Black;
  }
}