【问题标题】:How to update label text in vb.net如何在 vb.net 中更新标签文本
【发布时间】:2011-07-28 17:38:53
【问题描述】:

在我的 vb.net winform 应用程序中,单击开始按钮时 label1.text 应该是“进程已启动”,然后一些文件保存方法将在完成该方法后运行 label1.text 应该更改为“文件已保存”。

 Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click

    lblStatus.ForeColor = Color.Red
    lblStatus.Text = "Saving to File"

     'Get the values and write to xls
             Trigger()
             SaveXls()

     lblStatus.Text = "File Saved"
     lblStatus.ForeColor = Color.Green
End Sub

标签“保存到文件”的初始状态未出现。触发方法完成后,标签的状态变为“文件已保存”

有什么建议吗?

【问题讨论】:

标签: .net vb.net


【解决方案1】:

您需要使用标签的 Refresh() 方法。使用 Application.DoEvents 有副作用,应谨慎使用(这不是它的适当用途)。

【讨论】:

  • 进一步解释:当您更改控件上的某些内容时,该控件被标记为重新绘制。在所有其他代码完成运行之前,不会发生重新绘制。这可以防止在一组代码中更改多个控件或以多种方式更改一个控件时进行无数次重绘。现在调用 Control.Refresh() 会强制它重新绘制。
【解决方案2】:

其他两个答案(以及我的偏好)的替代方法是使用Background Worker 执行Trigger()SaveXls()

您的代码将类似于:

Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click

    lblStatus.ForeColor = Color.Red
    lblStatus.Text = "Saving to File"

    If backgroundWorker1.IsBusy <> True Then
        ' Start the asynchronous operation.
        backgroundWorker1.RunWorkerAsync()
    End If
End Sub

Private Sub backgroundWorker1_DoWork(ByVal sender As System.Object, _
ByVal e As DoWorkEventArgs) Handles backgroundWorker1.DoWork
     'Get the values and write to xls
             Trigger()
             SaveXls()
End Sub

Private Sub backgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, _
ByVal e As RunWorkerCompletedEventArgs) Handles backgroundWorker1.RunWorkerCompleted
    If e.Cancelled = True Then
        lblStatus.Text = "Canceled!"
        lblStatus.ForeColor = Color.Black
    ElseIf e.Error IsNot Nothing Then
        lblStatus.Text = "Error: " & e.Error.Message
    Else
        lblStatus.Text = "File Saved"
        lblStatus.ForeColor = Color.Green
    End If
End Sub

使用 Background Worker 还会在后台操作发生时让您的表单保持响应,而不是冻结它。

【讨论】:

    【解决方案3】:

    在初始设置标签文本后,使用 form1.refresh() 刷新表单。然后 Trigger() 和 SaveXls() 函数将执行并最终将标签文本更改为“filesaved”。

    感谢大家的回复和努力

    【讨论】:

      【解决方案4】:

      更新 lblStatus 标签后,您需要暂时停止阻止您的代码。您可以在第一次标签更新后尝试输入Application.DoEvents。否则,您的表单将等待刷新,直到您的整个代码块执行完毕。 Application.DoEvents 将暂停你当前的线程,处理windows消息,然后在完成后继续执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-19
        • 2021-04-05
        相关资源
        最近更新 更多