0

.Net で適切に行う方法がわからないことがいくつかありますが、何らかの解決策が確実に存在すると確信しています。

ダイアログのように開いているフォームがあり、(その) form_load の下でデータのチェックがいくつかあり、その後、処理に 10 秒かかるプロシージャを呼び出します。
この間、プロセスが終了するまでフォームは表示されず、メイン フォームに進行中の新しいフォームのプログレスバーの代わりに「メニューのガベージ」が表示されます。

私が目にする2番目の問題は、最初の問題に近い可能性があることです。私のフォームの中には、プロセスの結果が表示されたときにプログレスバーが終了しないものがありますが、プログラム(プログレスバー用)は適切に作成されています。一部の非同期タスクでプログレスバーが機能しているようです。

これらの問題を解決し、手順が開始される前にフォームを表示するにはどうすればよいですか? プログレスバーに信頼できる値を表示するにはどうすればよいですか? それとも、VB6 で動作するように言うことができますか?

最初の問題については、次を試します。

Me.Activate
or 
Me.Refresh

Call myProcedureWithProgressBar(myArgs)

Form_Load からですが、結果はありません。
手順が終了するとフォームが表示されますが、その前に表示する必要があります。

4

1 に答える 1

1

イベントは、を表示するForm_Loadにコードを実行します。を作成し、これを使用して、フォームのロード後にコードを自動的に実行できます。FormTimer

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Timer1.Start()
End Sub

Private Sub OnFormLoaded(sender As Object, e As EventArgs) Handles Timer1.Tick
    Timer1.Enabled = False

    '...
End Sub

そして、私が行ったようにメソッドのタイマーを停止し、ユーザーが実行を妨げる可能性のあること(ボ​​タンをクリックする、フォームを閉じるなど)を実行しないようにしてください。それが役に立てば幸い。


そして、この問題については、ProgressBarより多くの情報やコードがなければ、何が問題になるのかわかりません。たぶんあなたはこのようなことを試すことができます:

Public Sub UpdateProgressBar(ByVal cont As Integer, ByVal max As Integer, ByRef objTarget As ProgressBar)
    Dim dProgress As Double = cont * 100 / max
    objTarget.Value = CInt(dProgress)
    objTarget.Refresh()
End Sub
于 2013-01-28T08:57:41.970 に答える