For文を使うプログラムでプログレスバーを使用する方法 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 るきお  (社会人)
投稿日時
2011/3/28 23:06:16
う~ん。よくわかりません。
Forの中にFor Each分を入れることは普通にできます。
プログレスバーの制御はForだろうとFor Eachだろうと私が書いたように書くだけです。
何か困っていることがあるのでしょうか?
具体的なプログラムを載せて、「ここでこうしたいが、できない。または、エラーになる。」みたいに書いてもらえればもうちょっとアドバイスできるかもしれません。
Forの中にFor Each分を入れることは普通にできます。
プログレスバーの制御はForだろうとFor Eachだろうと私が書いたように書くだけです。
何か困っていることがあるのでしょうか?
具体的なプログラムを載せて、「ここでこうしたいが、できない。または、エラーになる。」みたいに書いてもらえればもうちょっとアドバイスできるかもしれません。
投稿者 AFO  (中学生)
投稿日時
2011/3/28 22:32:51
間違えました。
ForのなかにFor Each文です
ForのなかにFor Each文です
投稿者 るきお  (社会人)
投稿日時
2011/3/28 22:20:31
言おうとされていることがよくわかりません。
>For文を使うプログラムの進捗状況をプログレスバーに表示することはできますか?
>プログレスバーを進めるにはFor文を使いますよね?
1つのForがこの両方の役割を兼ねるように書くのが普通と思います。
もうちょっと複雑な場合を想定していますか?
>For文を使うプログラムの進捗状況をプログレスバーに表示することはできますか?
>プログレスバーを進めるにはFor文を使いますよね?
1つのForがこの両方の役割を兼ねるように書くのが普通と思います。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For i As Integer = 0 To 99
'時間のかかる処理。ここではSleepにしておきます。
Threading.Thread.Sleep(100)
ProgressBar1.Value += 1
Next
End Sub
もうちょっと複雑な場合を想定していますか?
投稿者 AFO  (中学生)
投稿日時
2011/3/28 22:03:32
For文を使うプログラムの進捗状況をプログレスバーに表示することはできますか?
プログレスバーを進めるにはFor文を使いますよね?
ということは
For開始
↓
Forの中にあるFor(For2とし、時間のかかる作業)を実行(この時点でプログレスバーは変化なし)
↓
For2終了
↓
プログレスバーのvalueプロパティを1プラスする
↓
Next
↓
またFor2を実行
・
・
・
となってしまいます。
どうすればいいでしょうか
プログレスバーを進めるにはFor文を使いますよね?
ということは
For開始
↓
Forの中にあるFor(For2とし、時間のかかる作業)を実行(この時点でプログレスバーは変化なし)
↓
For2終了
↓
プログレスバーのvalueプロパティを1プラスする
↓
Next
↓
またFor2を実行
・
・
・
となってしまいます。
どうすればいいでしょうか
For のループはごく短い時間で完了しますので、通常はプログレスバーに表示しきれません。
一回のループあたりの処理時間が長い場合にはその限りではありませんが、
処理が長いと、画面の再描画処理も阻害されてしまう可能性が高いため、
プログレスバーを併用しても、あまり有効では無いと思います。
> プログレスバーを進めるにはFor文を使いますよね?
もちろん、For を使う場合もあろうかと思いますけれども、個人的には、
プログレスバーを For と組み合わせて使う頻度は、さほど高くないですね。
使うのであれば、Timer や BackgroundWorker、あるいは非同期系の処理と組み合わせて、
「長い処理」を行う部分と、その進捗状況をプログレスバーに表示する部分とを
分離したほうが良いかと思います。