8

C#のWindowsフォームアプリケーションがあります。私が現在設定している方法では、Form1_Load()を実行すると、復元された未保存のデータがチェックされ、見つかった場合は、そのデータを開くかどうかをユーザーに確認します。プログラムを実行すると正常に動作しますが、メッセージボックスがすぐに表示され、ユーザーが[はい]または[いいえ]をクリックするまでメインプログラムフォーム(Form1)は表示されません。Form1を最初にポップアップさせてから、メッセージボックスのプロンプトを表示したいと思います。

ここで、フォームにタイマーを作成する前にこの問題を回避し、Form1_Load()メソッドでタイマーを開始し、最初のタイマーティックイベントでチェックとユーザープロンプトを実行しました。この手法は問題を解決しますが、もっと良い方法があるようです。

もっと良いアイデアはありますか?

編集:私も同様のことをするためにバックグラウンドワーカーを使用したと思います。メソッドを呼び出してフォームスレッドに戻るという面倒な作業をすべて実行するのはちょっとおかしなことに思えますが、数ミリ秒遅延させるだけですべてのがらくたになります。

4

4 に答える 4

16

Form1_Shown() を使用します

于 2010-06-02T13:18:56.640 に答える
6

Shownイベントを使用します。必要なものに合っているようで、フォームが最初に表示されたときにのみ表示されます。

Form f1 = new Form();
f1.Shown += new EventHandler(f1_Shown);

public void f1_Shown(object sender, EventArgs e)
{
   // Show dialog in here
}
于 2010-06-02T13:25:04.677 に答える
3

「表示」イベントを試してください。

Form.Show イベント

于 2010-06-02T13:21:41.600 に答える
2
  • Windows.Forms.Timer を使用することは、目的を達成するための優れた、安定した、よく知られた、簡単に理解できる手法です。他のタイマー オブジェクトは避けます。

  • フォームのShownイベントはうまく機能します。

  • メソッドをオーバーロード/オーバーライドしますShow。(より細かく制御するために私が好む手法です。) この方法では、必要なチェックを行います。準備ができたら、メソッドを呼び出して、base.Showメッセージ ボックス、プロンプト、ログなど、その他の処理を行います。

于 2010-06-02T13:19:40.297 に答える