簡體   English   中英

C# RichTextBox 高亮線

[英]C# RichTextBox Highlight Line

我已經上傳了我想要實現的圖像...在此處輸入圖片說明

如您所見,我想突出顯示我單擊的行 [並在 _textchanged 事件上更新它! 有沒有可能用任何顏色來做到這一點......不必是黃色。 我已經搜索了很多,但我無法理解如何獲得起始長度和結束長度以及所有這些。

它讓我很困惑,我不明白,需要一些幫助。 感謝您在此線程中提供的所有幫助。 它也是窗口形式。 我正在制作一個記事本應用程序,如記事本++或其他一些記事本應用程序...... .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);
         }
     }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM