2011-07-27 16 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」。

感謝所有烏拉圭回合的答覆和努力