2011-07-27 167 views
1

私のvb.net winformアプリケーションで、開始ボタンをクリックすると、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 

「ファイルに保存」というラベルの初期状態は表示されません。トリガーメソッドが終了した後、ラベルの状態が「保存されたファイル」に変更されています

何か提案してください。

+0

可能重複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

他の2つの回答(と自分の好み)に代わってを使用して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"に変更されます。

すべてのウルの返信をありがとうと努力

([vb.​​netでlabel.textアップデート後までスピーチに遅延テキスト]の
関連する問題