1

フォーム上でボタンをクリックすると、実行時間の長いタスクが開始されます。タスクは別のワーカー スレッドで実行され、タスクの実行中に進行状況バーを含む別のフォームを表示します。

タスクが終了するかキャンセルされると、進行状況バーを表示しているフォームが閉じられます。ダミーコードは次のようになります。

task.DoWorkAsync();
progressBar.Show(parent);

そして課題が終わったら

progressBar.Close();

しかし、プログレス バーを表示しているフォームが閉じられた瞬間に、メイン フォームがバックグラウンドに移行することがあります。より正確には、問題を再現するために私がしなければならないこと:

  • アプリケーションを開始する
  • 別のウィンドウ (別のアプリケーション、たとえば Excel) をクリックして前面に表示します。
  • アプリケーションウィンドウをクリックします(前面に表示します)
  • タスクを実行する

プログレスバーが閉じられた後、私のアプリケーションウィンドウは、以前に前面に持ってきた別のウィンドウ (ここでは Excel) の後ろに消えます。

もちろん、上で説明したことは、私のアプリケーションの大まかな概要です。しかし、私が必要としているのは、進行状況バーが閉じられたときにフォームがフォームの後ろに消える理由を見つけることです。

4

2 に答える 2

1

メインフォーム

ProgressBar progress = new ProgressBar(this);
progress.Show();
this.Hide();

プログレスバー

parent.Show();
progress.Hide();

または、 を使用することもできますShowDialog()。これにより、メイン フォームは開いたままになりますが、プログレス バー フォームが閉じられるまでアクセスできなくなります。

于 2013-05-27T16:46:40.437 に答える
0

私の理解が正しければForm、プログレスバーを表示するを閉じると、メインFormがバックグラウンドに移動しますか?

その場合は、メイン フォームがフォーカスを奪ってしまったので、プログレス バー フォームを表示した後、おそらくメイン フォームにフォーカスを戻す必要があります。

フォーム focus に関するスタック オーバーフローの質問を次に示します。

フォームがフォーカスを失った - 基本的な質問

于 2013-05-27T16:46:51.750 に答える