gpt4 book ai didi

C# RichTextBox高亮行

转载 作者:太空狗 更新时间:2023-10-30 01:04:29 24 4
gpt4 key购买 nike

我已经上传了我想要实现的图像... enter image description here

如您所见,我想突出显示我点击的行 [并在 _textchanged 事件中更新它!有什么可能的方法可以用任何颜色来做到这一点……不必是黄色。我搜索了很多,但我不明白如何获得起始长度和结束长度等等。

这让我很困惑,我不明白,需要一些帮助。感谢您在此线程中提供的所有帮助。也是windows窗体。我正在制作一个记事本应用程序,例如 notepad++ 或其他一些记事本应用程序... .NET Windows Form C# RichTextBox

最佳答案

您需要创建您自己的继承自 RichTextBox 的控件,并在您的表单上使用该控件。由于 RichTextBox 不支持所有者绘图,您将必须监听 WM_PAINT 消息,然后在其中进行工作。这是一个运行良好的示例,尽管行高现在是硬编码的:

 public class HighlightableRTB : RichTextBox
{
// You should probably find a way to calculate this, as each line could have a different height.
private int LineHeight = 15;
public HighlightableRTB()
{
HighlightColor = Color.Yellow;
}

[Category("Custom"),
Description("Specifies the highlight color.")]
public Color HighlightColor { get; set; }

protected override void OnSelectionChanged(EventArgs e)
{
base.OnSelectionChanged(e);
this.Invalidate();
}

private const int WM_PAINT = 15;

protected override void WndProc(ref Message m)
{
if (m.Msg == WM_PAINT)
{
var selectLength = this.SelectionLength;
var selectStart = this.SelectionStart;

this.Invalidate();
base.WndProc(ref m);

if (selectLength > 0) return; // Hides the highlight if the user is selecting something

using (Graphics g = Graphics.FromHwnd(this.Handle))
{
Brush b = new SolidBrush(Color.FromArgb(50, HighlightColor));
var line = this.GetLineFromCharIndex(selectStart);
var loc = this.GetPositionFromCharIndex(this.GetFirstCharIndexFromLine(line));

g.FillRectangle(b, new Rectangle(loc, new Size(this.Width, LineHeight)));
}
}
else
{
base.WndProc(ref m);
}
}
}

关于C# RichTextBox高亮行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23030837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com