Почему этот код глючит? - [Отображение количества строк рядом с RTB]
Привет,
Я уже несколько дней пытаюсь заставить этот код работать, но до сих пор не нашел решения. Я пытаюсь отобразить количество строк (в RichTxtBx) на picturebox (как это видно в большинстве редакторов кода и ide).
Это текущий код:
Option Strict On Public Class Form1 Dim total_lines As Integer Private Sub DrawRichTextBoxLineNumbers(ByRef g As Graphics) With RichTextBox1 Dim font_height As Single font_height = .GetPositionFromCharIndex(.GetFirstCharIndexFromLine(2)).Y _ - .GetPositionFromCharIndex(.GetFirstCharIndexFromLine(1)).Y If font_height = 0 Then Exit Sub Dim first_index As Integer Dim first_line As Integer Dim first_line_y As Integer first_index = .GetCharIndexFromPosition(New Point(0, CInt(g.VisibleClipBounds.Y + font_height / 3))) first_line = .GetLineFromCharIndex(first_index) first_line_y = .GetPositionFromCharIndex(first_index).Y total_lines = RichTextBox1.GetLineFromCharIndex(Int32.MaxValue) + 1 Dim i As Integer = first_line + 1 Dim y As Single Do While y < g.VisibleClipBounds.Y + g.VisibleClipBounds.Height y = first_line_y + 2 + font_height * (i - first_line - 1) If total_lines >= i Then g.DrawString((i).ToString, .Font, Brushes.White, PictureBox1.Width _ - g.MeasureString((i).ToString, .Font).Width, y) Else Exit Do End If i += 1 Loop End With End Sub Private Sub r_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.Resize PictureBox1.Invalidate() End Sub Private Sub r_VScroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles RichTextBox1.VScroll PictureBox1.Invalidate() End Sub Private Sub p_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint DrawRichTextBoxLineNumbers(e.Graphics) End Sub Private Sub MyRichTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged If RichTextBox1.GetLineFromCharIndex(Int32.MaxValue) + 1 <> total_lines Then PictureBox1.Invalidate() End Sub End Class
Вот GIF, показывающий эти проблемы:
Image - TinyPic - бесплатный хостинг изображений, обмен фотографиями и видеохостинг[^]
Кто-нибудь знает решение этой проблемы? У меня нет идей (у меня не так много опыта, поэтому мои идеи довольно ограничены).
Заранее большое вам спасибо - для меня было бы очень важно наконец решить эту проблему, чтобы взяться за остальную часть моего проекта; яааай!!!
Что я уже пробовал:
Меняя цифры, глядя на код, пытаясь понять его. Я особенно сосредоточился на модификации:
first_index = .GetCharIndexFromPosition(New Point(0, CInt(g.VisibleClipBounds.Y + font_height / 3)))