小编Mar*_*k S的帖子

突出显示RichTextBox的当前行

这通过将透明颜色绘制为当前行上的背景颜色来突出显示每条线的整个宽度.线路切换时,将恢复原始背景颜色.

所以,我们想要做的是:

  1. 验证前一个和当前矩形不匹配,因此不要两次绘制相同的区域
  2. 使用控件背景颜色替换最后一行的突出显示
  3. 使用透明颜色突出显示当前行
  4. 设置mLastHighlight每个应用行的索引和矩形

但是,删除突出显示时,文本会被涂上.应用突出显示时不会发生这种情况.

一种解决方案是在重置背景颜色后重新重新显示控件上的文本.虽然文本格式,选择颜色,字体样式,超链接等将是繁琐的过滤.不是很优雅.

这导致更简单的解决方案,刷新控制.虽然那会导致大量的闪烁.也不接受.

有优雅的解决方案吗?我完全不知道为什么会这样.

编辑:编辑以反映Code Gray的回应.

using System;

public class RTBHL : RichTextBox
{
    private LastHighlight mLastHighlight = new LastHighlight(0, Rectangle.Empty);

    private class LastHighlight
    {
        public int mCharIndex;
        public Rectangle mRectangle;

        public LastHighlight(int index, Rectangle r)
        {
            mCharIndex = index;
            mRectangle = r;
        }
    }

    public void PaintLineHighlight()
    {
        using (Graphics g = this.CreateGraphics)
        {
            // highlight color
            Color c = Color.Beige;
            // current pen color
            Pen cp = new Pen(Color.Beige); …
Run Code Online (Sandbox Code Playgroud)

c# highlight richtextbox winforms

5
推荐指数
1
解决办法
1481
查看次数

标签 统计

c# ×1

highlight ×1

richtextbox ×1

winforms ×1