Как непрерывно выводить текст в RichTextBox, чтобы он был визуально заметен? - PullRequest
1 голос
/ 12 апреля 2019

Я просто сейчас пытаюсь создать свой собственный проект VB, чтобы познакомиться с языком, и все, что я хотел бы сделать, это постоянно печатать строку до следующей строки в RichTextBox.
Проблема, которую я не могу понять, состоит в том, чтобы она печаталась одна за другой, она печатает все сразу. Ниже приведен код, показывающий, где я сейчас нахожусь.

Я пробовал использовать разные методы подсчета, и в зависимости от того, как он настроен, отладчик даже не загружается ...

Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel
Friend WithEvents Button1 As System.Windows.Forms.Button

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
End Sub
Private Sub RTB1_TextChanged(sender As System.Object, e As System.EventArgs)
End Sub

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Dim counter1 As Integer = 0
    Dim i As String = "- I" & vbCrLf

    While counter1 <= 10
        Timer1.Interval = 1000
        Timer1.Start()
        i = i + i
        counter1 += 1
    End While

    RichTextBox1.Text = i


    'Loop

    'Environment.NewLine

End Sub
Friend WithEvents TableLayoutPanel2 As System.Windows.Forms.TableLayoutPanel

Private Sub TableLayoutPanel2_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles TableLayoutPanel2.Paint

End Sub
Friend WithEvents RichTextBox1 As System.Windows.Forms.RichTextBox

Private Sub RichTextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles RichTextBox1.TextChanged
    RichTextBox1.SelectionStart = RichTextBox1.Text.Length
    RichTextBox1.ScrollToCaret()
End Sub
Friend WithEvents Timer1 As System.Windows.Forms.Timer

Спасибо всем, кто нашел время, чтобы взглянуть на это и помочь мне!
Я действительно ищу свой вывод для прокрутки вниз по RichTextBox и непрерывного вывода строки в новой строке снова и снова по одному.

1 Ответ

0 голосов
/ 16 апреля 2019

Как описано:

  • Создать System.Windows.Forms.Timer .Существуют разные типы таймеров.Это то, что вам нужно для обновления компонента пользовательского интерфейса, поскольку его событие Tick вызывается в потоке пользовательского интерфейса.
  • Инициализируйте таймер и установите его интервал на 1 секунду (1000 ms).Инициализация выполняется в событии Shown () формы, которое вызывается, когда форма готова к представлению (см. Документы).
  • Добавить обработчик события Timer.Tick (здесь добавляется в коде)
  • Инициализировать поле Integer (здесь оно называется timerCounter)который увеличивается каждый раз, когда срабатывает таймер.
  • В событии Tick добавьте строку текста в элемент управления RichTextBox, используя его метод AppendText () , который позволяет добавлять текст в элемент управления без его очистки.Этот метод является общим для всех элементов управления, которые наследуют TextBoxBase.

Примечание:
Я добавляю текст в RichTextBox, используя интерполированную строку $"{Some value}".Если ваша версия VB.Net не поддерживает ее, используйте старый формат:

RichTextBox1.AppendText("Line number " & timerCounter.ToString() & Environment.NewLine)


Private rtbTimer As System.Windows.Forms.Timer
Private timerCounter As Integer = 0

Protected Sub TimerTick(sender As Object, e As EventArgs)
    timerCounter += 1
    RichTextBox1.AppendText($"Line number {timerCounter} {Environment.NewLine}")
    RichTextBox1.ScrollToCaret()
End Sub

Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
    rtbTimer = New Windows.Forms.Timer With { .Interval = 1000 }
    AddHandler rtbTimer.Tick, AddressOf TimerTick
    rtbTimer.Start()
End Sub
...