- 締切済み
VB2008 ProgressBar について
VB2008 ProgressBar について教えてください。 pictureboxの走査プログラムを作成しているのですが。 走査を行いHITした結果を四角で囲むというプログラムを作成しています。 ですが、実行するとどうしてもprogressbarが最後まで進んでから四角の描画処理をしてしまいます。以下にソースを書きますので、間違っている場所を教えてください。 よろしくお願いします。 (Textbox1を閾値としてsikiiに代入し、二次元配列Cor(,)と比較して判断します。)ProgressBarの最大値とSTEP値はFormLordで指定しています。 Dim sikii = Val(TextBox1.Text) Dim g As Graphics g = PictureBox3.CreateGraphics() Dim i, j As Integer For i = 0 To PictureBox3.width For j = 0 To PictureBox3.Height If Cor(i, j) >= sikii Then g.DrawRectangle(Pens.Black,i,j,16,16) End If ProgressBar1.PerformStep() Next j Next i MsgBox("完了しました。", , "通知")
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- AKARI0418
- ベストアンサー率67% (112/166)
DoEventsは処理時間を大幅に増加させてしまうため、Updateメソッドを使うことをお勧めします。 これはコントロールを再描画するメソッドです。 DoEventsは他の処理の制御を許可するため、再描画処理も走り画面の更新がかかります。 例です。 PictureBox3.update()
- redfox63
- ベストアンサー率71% (1325/1856)
適当なタイミングでApplication.DoEvntsを呼び出さないとフォームの描画をしてくれません For i = 0 To PictureBox3.width For j = 0 To PictureBox3.Height If Cor(i, j) >= sikii Then g.DrawRectangle(Pens.Black,i,j,16,16) ' これを追加 Application.DoEvents() End If ProgressBar1.PerformStep() Next j Next i といった具合にして見ましょう
お礼
>適当なタイミングでApplication.DoEvntsを呼び出さないとフォームの描画をしてくれません ありがとうございます。Application.DoEvntsは調べてみましたがなるほどこんなのもあるのですね勉強になりました。 ご指摘頂いた通りに記述しましたが、変化が見られません。 Application.DoEvntsあたりをもう少し調べてみることにします、早速の回答ありがとうございました。