2016-05-02 7 views
-1

アニメーションを使用してデータベースに簡単なデータ転送をしようとしています。私はプログレスバーのアニメーション化に成功しましたが、私のパーセントラベルは値とアニメーションを変えませんでした。 私のコードは以下の通りです:foreachループのラベル要素の変更とアニメーション

pBar.Maximum = query.Count(); //pBar is progress bar 
foreach (var cell in query) 
{ 
    pBar.Value++; 
    lblYuzde.Text = "%" + (pBar.Value/pBar.Maximum) * 100; //lblYuzde is label 
    Application.DoEvents(); 
    //Do events 
} 

プログレスバーがanimatonでの作業良いですが、ラベルが変更されていません。私の間違いは何ですか?

+0

あなたがコードをステップ実行するためにデバッガを使用するときは、最初の反復でこのラインを通過する際に、どのような値が 'lblYuzde.Text'です。'lblYuzde.Text ="% "+(pBar.Value/pBar.Maximum)* 100;' Text'プロパティで値を表現するには、整数値を文字列に変換する必要があります。デバッガを使用すると簡単にこの簡単な間違いを修正できます。 'Application.DoEvents()'を使用しないでみてください。おそらく 'BackgroundWorker'を使ってより良い結果を得ることができます。これの例はたくさんあります。 – MethodMan

+1

投稿されたコードは、ラベルが%100にまっすぐになるようにする必要があります。実際に何らかの処理を表示するには、それを遅くすることはありません。推奨されるように、Application.DoEventsを避け、BackgroundWorkerを使用してください。 – LarsTech

+0

@MethodManこれはうまくいくと確信しています、 '' string "+ 12''は' 'string12" 'になります。ここでの問題は整数除算のようです: 'pBar.Value'は常に' pBar.Maximum'より小さいので、除算は常に '0'です。正しい方法は "%" +(100 * pBar.Value/pBar.Maximum) 'です。とにかく、これをループで行い、 'Application.DoEvents'を呼び出すことは悪い方法です。タイマーや非同期メソッドの使用について考えてみてください。 –

答えて

0

あなたはあなたの操作は整数だけがあなたの結果が正しいことができませんでした値がある行

foreach(...) 
{ 
    ... 
    lblYuzde.Refresh();// or lblYuzde.Invalidate(); 
} 
関連する問題