1

私は vb.net Windows フォーム アプリケーションに、ProgressBar コントロールを持つ PolicyRefreshStatus.vb というフォームを持っています。EditPolicy.vb と呼ばれるメイン フォームから、EditPolicy.vb の上に PolicyRefreshStatus.vb を表示する必要があります。

.show() メソッドを使用して PolicyRefreshStatus.vb バーを表示すると、問題なく動作します。問題は、ユーザーがメイン フォームをクリックして戻ると、PolicyRefreshStatus.vb がフォーカスを失うことです。.ShowDialog() を使用して PolicyRefreshStatus.vb をモーダル フォームとして表示すると、.ShowDialog() ステートメントの後で EditPolicy.vb で実行が停止します。

たとえば、コードでは次のようになります。

 mPolicyRefreshStatus = New PolicyRefreshStatus
 mPolicyRefreshStatus.pbMax = mPolicy.ClaimsUpdateMax
 mPolicyRefreshStatus.ShowDialog()
 mPolicy.UpdateFromFIS() 

PolicyRefreshStatus フォームが閉じるのを待っているため、行 mPolicy.UpdateFromFIS() は実行されません。

PolicyRefreshStatus をモーダル フォームで表示し、EditPolicy.vb で実行を続行するにはどうすればよいですか?

4

2 に答える 2

0

フォームをモーダルに表示して、ルーチンを続行させることはできません。フォームを非モーダルに表示してから、他の作業を行い、終了したらフォームを閉じる必要があります。たぶんタスクが終了するまでループ?

親フォーム パラメータで Show() を使用すると、ユーザビリティが向上します。ツールウィンドウのようなものです。

于 2012-04-18T17:19:02.323 に答える
0

関連するオプションがいくつかあります。

これはまず、デリゲートまたはインターフェイスを実装するクラスの形式で進行状況バーに作業単位を渡すことです。このようなもの(正確性はチェックされていません。大まかな例です):

mPolicyRefreshStatus = New PolicyRefreshStatus  
mPolicyRefreshStatus.pbMax = mPolicy.ClaimsUpdateMax  
mPolicyRefreshStatus.UnitOfWork = AddressOf(mPolicy.UpdateFromFIS())
mPolicyRefreshStatus.ShowDialog()  

次に、進捗フォーム内で、実際に作業を行うルーチンにコールバックできます。

もう 1 つの方法は、ProgressForm でイベントを定義し、所有/起動オブジェクトがそれらのイベントを処理して作業を実行できるようにすることです。コンセプトは同じです。プログレス フォームからランチャーにコールバックして、実際のビジネス ロジックを実行します。

于 2012-04-19T12:01:49.327 に答える