2011-09-26 2 views
2

J'ai un petit projet Windows Forms et maintenant je cherche à afficher une image au démarrage du projet, je veux dire Program.csAfficher l'image au démarrage du projet - programme.cs?

Est-ce possible?

static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Image MyPrgImage = Image.FromFile("C:\\Temp\\Images\\For_Network.gif"); 
      ?????? 

      Application.Run(new Form1()); 
     } 
+2

Vous voulez dire comme un écran de démarrage? – BoltClock

+0

Vous cherchez à créer un écran d'accueil. Vérifiez cela: http://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=c%23+splash+screen –

Répondre

6

Bien sûr ... Ajouter WindowsForm à votre projet, appelez-le SplashImageForm. Ajoutez le contrôle PictureBox et ajoutez l'image que vous voulez. Redimensionner le formulaire, définissez ces propriétés SplashImageForm:

FormBorderStyle - None 
ShowInTaskBar - false 
StartPosition - CenterScreen 

Ensuite, vous voulez montrer que la forme avant Form1 et fermer après le délai a expiré ... Comme si par exemple:

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    SplashImageForm f = new SplashImageForm(); 

    f.Shown += new EventHandler((o,e)=>{ 
     System.Threading.Thread t = new System.Threading.Thread(() => 
      { 
       System.Threading.Thread.Sleep(2000); 
       f.Invoke(new Action(() => { f.Close(); })); 

      }); 
      t.IsBackground = true; 
      t.Start(); 
    }); 

    Application.Run(f); 
    Application.Run(new Form1()); 
} 

EDIT Maintenant, il y a un nouveau thread qui bloque sur System.Threading.Thread.Sleep(2000) pendant 2 secondes, et le thread principal est autorisé à bloquer sur Application.Run(f) comme il est censé, jusqu'à ce que le SplashImageForm ne soit pas fermé. Ainsi, l'image est chargée par le thread principal et l'interface graphique est réactive.

Lorsque le délai expire, la méthode Invoke() est appelée, de sorte que le thread principal qui est le propriétaire du formulaire le ferme. Si ce n'était pas le cas, l'exception Thread Thread serait lancée.

Maintenant, l'image est affichée pendant 2 secondes, et après que Form1 est montré.

+0

Mais le problème est l'affichage de la boîte à images pas de problème. Mais l'image ne s'affiche pas avec l'image ... – Paramu

+1

Essayez maintenant. Vérifiez le code à nouveau, je l'ai édité pour ajouter un nouveau thread qui sera bloqué à la place de l'ancien code où le thread principal a été bloqué. – Cipi

+0

Merci Cipi ... Je deviens clair – Paramu

1

Vous auriez besoin d'un formulaire simple, peut-être avec un PictureBox, pour charger et afficher l'image. Ensuite, retirez-le une fois que votre formulaire principal est chargé.

+0

Mais le problème est l'affichage de la boîte à images pas de problème. Mais l'image ne s'affiche pas avec la zone d'image ... – Paramu

2

Vous voulez dire un écran de démarrage, n'est-ce pas?
Envisagez d'ajouter une référence à Microsoft.VisualBasic (si ce n'est déjà fait), puis définissez la propriété WindowsFormsApplicationBase.SplashScreen.

quelques points:

  • Windows Forms ne dispose pas de support pour un écran d'accueil simple et droit.
    Même la solution ci-dessus prendra quelques secondes jusqu'à ce que le framework .net soit chargé pour afficher l'écran de démarrage.
  • Voir ce question here pour d'autres exemples et remarques importantes.
  • Voir cette CodeProject.com sample pour une solution personnalisée
+0

Vous ne devriez pas avoir besoin d'une ref. à Microsoft.VisualBasic ... – IAbstract

+0

@IAbstract pouvez-vous expliquer pourquoi pas? Je suis d'accord que cela semble bizarre, mais vous ajoutez également une référence à d'autres DLL juste pour utiliser leurs fonctionnalités. VisualBasic.dll est maintenu par MS et une partie intégrante du cadre. Net, donc je ne vois aucun problème avec cela. – Marc

+0

Voir la réponse @ Cipi ... qui n'utilise pas la référence. Je ne suis pas nécessairement d'accord avec le processus qu'il utilise pour fermer le formulaire, mais ce n'est pas incorrect. – IAbstract

0

Ajoutez simplement une forme de fenêtres (laissez le nom de la forme soit imgsplash) & de jeu d'options suivantes: -

FormBorderStyle - Aucun
ShowInTaskBar - faux
StartPosition - CenterScreen

sous cette forme définir l'image de fond [image que vous voulez montrer au démarrage de l'application]

--dans le programme.cs ajouter les étapes suivantes: -

 static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     imgsplash f = new imgsplash(); 
     f.Show(); 
     System.Threading.Thread.Sleep(2000); 
     f.Close(); 
     Application.Run(new Form1()); 
    } 
Questions connexes