私の現在の状況では、ユーザーが選択したいくつかのデータ型のランダム データを生成する winform アプリケーションがあります。ユーザーは、生成する必要がある行数を選択することもできます。生成には、button_click メソッド内で呼び出されるいくつかの関数を使用します。行の量と行ごとの列の量は可変長です。今私の質問は、進行状況全体に対して 1 つのプログレスバーを作成することは可能ですか? これは私が自分で作成した最初の C# プロジェクトです。バックグラウンド ワーカーに関する情報は既に見つかりましたが、質問が可能であれば情報を見つけることができません。何とか私を助けてくれることを願っています。私の悪い英語を申し訳ありません。
4 に答える
私があなたの質問を正しく理解していれば、はい、あなたProgressBar
はあなたのコードの異なる部分の中からあなたの質問の値を更新することができます。
さまざまなアクションにさまざまな値を割り当てたい場合は、ある種のメソッドを作成するだけです。例えば:
仮定myProgressBar.Maximum = rowCount + columnCount;
public void UpdateProgressBar(int i)
{
if(myProgressBar.Value < myProgressBar.Maximum)
{
if(myProgressBar + i > myProgressBar.Maximum)
myProgressBar.Value = myProgressBar.Maximum;
else myProgressBar.Value += i;
}
myProgressBar.Update();
}
ProgressBar
同様に、行の追加や削除、ボタンのクリックなど、反映させたいイベントでも同様のコードを呼び出します。
BackGroundWorker
UIの応答性を維持するための、に関するチュートリアルをご覧ください。
行と列の数はわかります。次に、progressBar1.Maximum を行 + 列に設定し、プログラムがバックグラウンド ワーカーで 1 つの列を実行するときに、progressBar1.Value += 1; を増やします。. progressBar がスムーズに実行されるように、backgroundWorker にすべてを含める必要があります。
ProgressBarには、「Value」という名前のメンバーがあります。作成されるアイテムの数がわかっている場合は、それに応じて設定できます。
バックグラウンドワーカーなしでそれを行うことができます。これを実現するには、進行状況バーの Minimum、Maximum、および Value プロパティを使用します。progressbar1.Maximum を行のカウントに設定し、ループの行内で値を 1 増やします。
progressBar1.Minimum = 1;
progressBar1.Maximum = Rows.Count;
progressBar1.Value = 1;
for (int i = 1; i <= Row.Count; i++)
{
progressBar1.Value = progressBar1.Value + 1;
...
... do your code
...