2013-04-05 7 views
9

プログラムの読み込み中に表示される読み込み画面(ちょうど写真など)を作成する方法を尋ね、プログラムの読み込みが終了したら消えます。C#WinForm - loading screen

私はプロセスバー(%)が表示されているのを見てきました。どのようにそれを持つことができ、どのようにそれに表示する%を計算するのですか?

Form_Load()イベントはありますが、Form_Loaded()イベントは表示されません。または%プロパティ/属性として%が表示されます。

+0

フォームの読み込みは何ですか?任意のデータベースクエリ操作、CPU集約操作、「進捗バー」を表示するために本当に必要なもの、またはスプラッシュ画面を必要とするものはありますか? –

+0

私はスプラッシュ画面が欲しいですが、私はまた、進行状況バーについて知りたいです。 – CaTx

答えて

26

すべての場合、スプラッシュ画面として1つのフォームを作成し、メインページに表示する前に表示し、リンク先ページを読み込んだ後にスプラッシュを閉じる必要があります。

using System.Threading; 
using System.Windows.Forms; 

namespace MyTools 
{ 
    public class SplashForm : Form 
    { 
     //Delegate for cross thread call to close 
     private delegate void CloseDelegate(); 

     //The type of form to be displayed as the splash screen. 
     private static SplashForm splashForm; 

     static public void ShowSplashScreen() 
     { 
      // Make sure it is only launched once. 

      if (splashForm != null) 
       return; 
      Thread thread = new Thread(new ThreadStart(SplashForm.ShowForm)); 
      thread.IsBackground = true; 
      thread.SetApartmentState(ApartmentState.STA); 
      thread.Start(); 
     } 

     static private void ShowForm() 
     { 
      splashForm = new SplashForm(); 
      Application.Run(splashForm); 
     } 

     static public void CloseForm() 
     { 
      splashForm.Invoke(new CloseDelegate(SplashForm.CloseFormInternal)); 
     } 

     static private void CloseFormInternal() 
     { 
      splashForm.Close(); 
      splashForm = null; 
     } 
    } 
} 

とメインプログラムの機能は次のようになります。あなたはあなたのアプリケーションで何度もSplashForm以上を表示するつもりなら

[STAThread] 
static void Main(string[] args) 
{ 
    SplashForm.ShowSplashScreen(); 
    MainForm mainForm = new MainForm(); //this takes ages 
    SplashForm.CloseForm(); 
    Application.Run(mainForm); 
} 
+0

このコードを使用して、別のフォームから大きくて遅いフォームを呼び出すことはできますか? 'ログイン - >メイン画面'のように? –

+0

mainScreenは、プログラムプロセスのスタートアップポイントです。あなたはmainの生きたインスタンスが必要です。 – JSJ

+0

ありがとうございます!これは素晴らしいチュートリアルでした! – tkrn

1

、そうでない場合は、あなたをゼロにするためにsplashForm変数を設定してくださいエラーが発生します。

static private void CloseFormInternal() 
{ 
    splashForm.Close(); 
    splashForm = null; 
} 
+0

コードの回答を編集します。ありがとう。 – Pedro77