如何在vb.net中更新标签文本

时间:2011-07-27 17:15:45

标签: .net vb.net

在我的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

标签“保存到文件”的初始状态不会出现。触发方法完成后,标签的状态将更改为“文件已保存”

有什么建议吗?

4 个答案:

答案 0 :(得分:5)

您需要使用标签的Refresh()方法。使用Application.DoEvents有副作用,应该小心使用(这不适合它)。

答案 1 :(得分:1)

替代其他两个答案(我的偏好)是使用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

使用后台工作程序还会在后台操作发生时保持表单响应,而不是冻结它。

答案 2 :(得分:1)

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

感谢所有回复和努力

答案 3 :(得分:0)

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