【问题标题】:Overlapping in label control text - vb.net标签控制文本中的重叠 - vb.net
【发布时间】:2015-07-14 08:59:51
【问题描述】:

我试图在标签控件中显示运行时程序状态的典型信息。所以,这个标签是不断变化的。 我在一个控制进度条的函数中设置了标签文本:

Public Sub InCrementarProgressBar(ByVal addValue As Integer, ByVal code As String)
        Me.ProgressBar1.Value = Me.ProgressBar1.Value + addValue
        lblProgressBar.Text = code
        lblProgressBar.Refresh()
        Threading.Thread.Sleep(500)
End Sub

问题是code 有时会比其他的大,所以新标签文本与旧标签文本重叠。而且如果旧标签文本比新标签大,那么新标签没有覆盖的文本部分仍然可见,我不想要它。这是它发生时的外观示例:

当前标签文本为Reading secondary species...,之前的文本为Reading thermodynamic parameters...

在将代码字符串分配给文本标签之前,我尝试执行类似lblProgressBar.Text = " " 的操作,但这并不优雅,而且也不起作用。

【问题讨论】:

  • 您可以尝试放入 Me.Refresh,但这可能会导致一些闪烁。你真的应该在一个单独的线程中更新你的进度条和标签
  • 但是,单独做这件事我赢了什么?两者都是独立的对象,但它们是相关的,这就是我在同一个线程中做的原因。
  • 谢谢@MattWilko。您的解决方案运行良好。我放了Me.Refresh() 而不是lblProgressBar.Refresh()。为什么现在可以正常工作,而以前不能正常工作?
  • 因为标签的 AutoSize 属性为 True。当文本字符串不那么宽时,它会缩小。这需要表单绘制其背景以覆盖先前的像素。挂起 UI 时不会发生这种情况。您将遇到的下一个问题是这项工作需要超过 5 秒。您将看到“无响应”幽灵窗口,并且进度条和标签都不会再更新。我们之前不是已经告诉过你 BackgroundWorker 了吗?
  • 是的,有人告诉我BackgroundWorker,但我不擅长vb.net,而且我对BackgroundWorker 一无所知。我必须学习才能了解它是如何工作的,并在我的进度条代码中实现它......

标签: vb.net label progress-bar overlap


【解决方案1】:

将表单的DoubleBuffered 属性设置为True。这很可能会解决此类问题。

【讨论】:

  • OK.. 然后将 Label 的AutoSize 属性设置为 False,并拉伸它以适应最大显示区域。由于您已经在调用 Label.Refresh 方法,因此它将使该区域无效并重绘。
  • 无论如何我都用@MattWilko 解决方案修复它。还是谢谢你!
猜你喜欢
  • 1970-01-01
  • 2019-10-23
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2018-11-30
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多