vb.net - 如何不断地将文本输出到 RichTextBox 并使其在视觉上引人注目?
问题描述
我现在只是想制作自己的 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 并不断地一次又一次地在新行上输出一个字符串。
解决方案
如所述:
- 创建一个System.Windows.Forms.Timer。有不同类型的计时器可用。这是更新 UI 组件所需的,因为它的 Tick 事件是在 UI 线程中引发的。
- 初始化计时器并将其间隔设置为 1 秒 (
1000 ms
)。初始化在表单的Shown()事件中执行,该事件在表单准备好呈现时引发(请参阅文档)。 - 添加Timer.Tick事件处理程序(这里在代码中添加)
- 初始化一个 Integer 字段(此处称为
timerCounter
),每次 Timer Ticks 都会递增。 - 在这种情况下,使用它的AppendText()
Tick
方法向 RichTextBox 控件添加一行文本,该方法允许将文本添加到控件而不清除它。此方法对所有继承.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
推荐阅读
- python - 在 Raspberry Pi 上从源代码编译 TensorFlow 时出现 Docker 错误
- python-3.x - SELENIUM add_cookie 偶尔会同时失败
- javascript - 实现 Lodash Invert
- snowflake-cloud-data-platform - 无法在雪花中描述。没有活动数据库
- javascript - 在一个 JS 表中显示 html 数据
- c - 通过在我们想要的任何地方加载库来避免内存碎片
- python - Django 没有从 Postgres 获取时区
- google-cloud-firestore - 如果写入失败,Firestore 快照侦听器是否会返回以撤消延迟补偿返回?
- python - Pandas - 合并具有相同索引的行的单元格
- c++ - 在C++中打印出矩阵,类方法问题