2013-04-05 11 views
9

Ich möchte fragen, wie man einen Ladebildschirm (nur ein Bild oder etwas), der erscheint, während das Programm geladen wird, und verschwindet, wenn das Programm geladen hat.C# WinForm - Ladebildschirm

in schickeren Versionen, habe ich die Prozessleiste (%) angezeigt. Wie kannst du das haben, und wie berechnet man%, um darauf zu zeigen?

Ich weiß, dass es ein Form_Load() -Ereignis gibt, aber ich sehe kein Form_Loaded() -Ereignis oder das% als Eigenschaft/Attribut irgendwo.

+0

Was lädt das Formular? Haben Sie irgendwelche Datenbankabfrageoperationen, CPU-intensive Operationen, etwas, das Sie wirklich benötigen, um eine "Fortschrittsbalken" anzuzeigen, oder wollen Sie nur einen Startbildschirm? –

+0

Ich möchte einen Startbildschirm, aber ich möchte auch über den Fortschrittsbalken wissen. – CaTx

Antwort

26

alles, was Sie brauchen, um ein Formular als Begrüßungsbildschirm zu erstellen und es anzuzeigen, bevor Sie die Zielseite anzeigen und schließen Sie diese Begrüßung, sobald die Zielseite geladen wurde.

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; 
     } 
    } 
} 

und die Hauptprogrammfunktion sieht wie folgt aus:

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

Kann ich mit diesem Code ein großes und langsames Formular aus einem anderen Formular aufrufen? Wie ein 'Login -> Hauptbildschirm'? –

+0

Ihr mainScreen ist der Startpunkt für Ihren Programmablauf. Sie brauchen also eine lebendige Instanz von main, dann können Sie. – JSJ

+0

Danke! Das war ein tolles Tutorial! – tkrn

1

Wenn Sie die SplashForm mehr als einmal in Ihrer Anwendung zeigen, gehen, sollten Sie die splashForm Variable setzen Sie auf Null sonst bekomme einen Fehler.

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

Ich bearbeite die Codeantwort. Vielen Dank. – Pedro77