アニメーションを使用してデータベースに簡単なデータ転送をしようとしています。私はプログレスバーのアニメーション化に成功しましたが、私のパーセントラベルは値とアニメーションを変えませんでした。 私のコードは以下の通りです: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での作業良いですが、ラベルが変更されていません。私の間違いは何ですか?
あなたがコードをステップ実行するためにデバッガを使用するときは、最初の反復でこのラインを通過する際に、どのような値が 'lblYuzde.Text'です。'lblYuzde.Text ="% "+(pBar.Value/pBar.Maximum)* 100;' Text'プロパティで値を表現するには、整数値を文字列に変換する必要があります。デバッガを使用すると簡単にこの簡単な間違いを修正できます。 'Application.DoEvents()'を使用しないでみてください。おそらく 'BackgroundWorker'を使ってより良い結果を得ることができます。これの例はたくさんあります。 – MethodMan
投稿されたコードは、ラベルが%100にまっすぐになるようにする必要があります。実際に何らかの処理を表示するには、それを遅くすることはありません。推奨されるように、Application.DoEventsを避け、BackgroundWorkerを使用してください。 – LarsTech
@MethodManこれはうまくいくと確信しています、 '' string "+ 12''は' 'string12" 'になります。ここでの問題は整数除算のようです: 'pBar.Value'は常に' pBar.Maximum'より小さいので、除算は常に '0'です。正しい方法は "%" +(100 * pBar.Value/pBar.Maximum) 'です。とにかく、これをループで行い、 'Application.DoEvents'を呼び出すことは悪い方法です。タイマーや非同期メソッドの使用について考えてみてください。 –