确定光标在TextBox中的位置并更改背景颜色

时间:2013-07-11 19:30:29

标签: c# winforms

我正在玩玩具文字编辑器。我想模仿Notepad ++的高亮显示当前行(更改光标所在行的背景颜色)。

我怎样才能在C#中做到这一点?

2 个答案:

答案 0 :(得分:2)

我认为你不能使用简单的文本框,只能使用RichTextBox。 This link将为您提供一些实现“突出当前行”类型UI的想法。

答案 1 :(得分:2)

可以做到。我没有全力以赴,但你需要创建自己的继承自TextBox控件的控件。您将覆盖OnPaint事件并在那里绘制自己的背景。这足以让你开始。

public partial class MyTextBox : TextBox
{
    public MyTextBox()
    {
        InitializeComponent();
        // Need the following line to enable the OnPaint event
        SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        // this demonstrates the concept, but doesn't do what you want
        base.OnPaint(e);
        Point p = this.GetPositionFromCharIndex(this.SelectionStart);
        e.Graphics.FillRectangle(Brushes.Aqua, 0, p.Y, this.Width, (int)e.Graphics.MeasureString("A", this.Font).Height);
    }
}