2011-07-27 18 views
1

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

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 

标签“保存到文件”的初始状态不会弹出。 Trigger方法结束后,标签的状态变为“文件保存”

有什么建议吗?

+0

可能重复[延迟文本到语音,直到在vb.net label.text更新后(http://stackoverflow.com/questions/6725067/delay-text- to-speech-until-after-label-text-updates-in-vb-net) –

回答

0

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

3

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

+1

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

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 

使用后台工作也将留下您的形式响应,而后台操作发生冻结它代替。

1

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

感谢所有乌拉圭回合的答复和努力