C# 中控件richtextbox中某一行的條目內容高亮,未選中保持不變。當鼠標點擊某一行的條目高亮,離開該條目就恢復默認顏色。
運行效果:
核心代碼實現功能:
//高亮指定行的方法private void HighlightLine(RichTextBox rtb,int lineIndex,Color color){//恢復原來的顏色if(lastHighlightedLine!=-1&&lastHighlightedLine!=lineIndex){int oldStart = rtb.GetFirstCharIndexFromLine(lastHighlightedLine);int oldLength = GetLineLength(rtb, lastHighlightedLine);rtb.Select(oldStart, oldLength);rtb.SelectionColor = originalColor;//恢復默認顏色}int startIndex = rtb.GetFirstCharIndexFromLine(lineIndex);if(startIndex == -1)return;int nextLineStart = rtb.GetFirstCharIndexFromLine(lineIndex + 1);int length = (nextLineStart == -1) ? rtb.TextLength - startIndex : nextLineStart - startIndex;rtb.Select(startIndex, length);rtb.SelectionColor = color;rtb.Select(0, 0);//重置選中狀態// 滾動到高亮行 rtb.ScrollToCaret();//更新狀態lastHighlightedLine = lineIndex;originalColor = rtb.ForeColor;//假設默認顏色與控件一致}//輔助方法,獲取行長度private int GetLineLength(RichTextBox rtb,int lineIndex){int start = rtb.GetFirstCharIndexFromLine(lineIndex);if (start == -1)return 0;int nextLineStart = rtb.GetFirstCharIndexFromLine(lineIndex + 1);return (nextLineStart == -1) ? rtb.TextLength - start : nextLineStart - start;}private void richTextBox_對位系統_MouseDown(object sender, MouseEventArgs e){//獲取鼠標點擊位置的字符索引int charIndex = richTextBox_對位系統.GetCharIndexFromPosition(e.Location);if (charIndex == -1)return;//計算點擊位置所在的行號(注意:行號從0開始)int lineNumber = richTextBox_對位系統.GetLineFromCharIndex(charIndex);//高亮該行HighlightLine(richTextBox_對位系統, lineNumber, Color.LightBlue);}
關注知識代碼AI。