Je dois afficher l'écran de démarrage au démarrage de mon application pendant quelques secondes. Est-ce que quelqu'un sait comment mettre cela en œuvre?
Sera beaucoup apprécié pour l'aide.
Tout d’abord, créez votre écran de démarrage comme une forme immuable, sans bordure, avec votre image dessus, paramétré pour s’afficher initialement au centre de l’écran et coloré comme vous le souhaitez. Tout cela peut être défini depuis le concepteur; Plus précisément, vous voulez:
Ensuite, vous devez décider où le montrer et où le rejeter. Ces deux tâches doivent être effectuées de part et d'autre de la logique de démarrage principale de votre programme. Cela pourrait être dans la routine main () de votre application, ou éventuellement dans le gestionnaire de charge de votre formulaire de demande principale; partout où vous créez de gros objets coûteux, lisez les paramètres du disque dur et prenez généralement beaucoup de temps pour effectuer des tâches en arrière-plan avant l'affichage de l'écran principal de l'application.
Ensuite, tout ce que vous avez à faire est de créer une instance de votre formulaire, Show (), et de conserver une référence à celle-ci pendant votre initialisation au démarrage. Une fois que votre formulaire principal a été chargé, fermez-le ().
Si votre écran de démarrage contient une image animée, la fenêtre devra également être "mise en tampon double", et vous devrez être absolument sûr que toute la logique d'initialisation se déroule en dehors du fil de l'interface graphique Logique de chargement dans le gestionnaire de chargement de mainform, vous devrez créer un BackgroundWorker ou une autre routine threadée.
Voici quelques étapes à suivre ...
Essayez-le et si vous êtes bloqué, revenez et posez des questions plus spécifiques sur vos problèmes.
solution simple et facile pour créer un écran de démarrage
maintenant mettre la minuterie en minuterie:
private void timer1_Tick(object sender, EventArgs e)
{
progressBar1.Increment(1);
if (progressBar1.Value == 100) timer1.Stop();
}
ajoutez un nouveau formulaire, utilisez le nom "FORM-1" et utilisez la commande suivante du FORMULAIRE 1.
remarque: le formulaire Splash fonctionne avant d'ouvrir votre formulaire1
ajouter cette bibliothèque
using System.Threading;
créer une fonction
public void splash()
{
Application.Run(new splash());
}
utilisez la commande suivante en initialisation comme ci-dessous.
public partial class login : Form
{
public login()
{
Thread t = new Thread(new ThreadStart(splash));
t.Start();
Thread.Sleep(15625);
InitializeComponent();
enter code here
t.Abort();
}
}
Il y a un très bon écran de démarrage plus sur CodeProject.
Il est livré avec
L'auteur a récemment parcouru et mis à jour le code. C'est vraiment un travail considérable, une collaboration entre de nombreux développeurs ayant de bonnes idées.
créer des éclaboussures
private void timer1_Tick(object sender, EventArgs e)
{
counter++;
progressBar1.Value = counter *5;
// label2.Text = (5*counter).ToString();
if (counter ==20)
{
timer1.Stop();
this.Close();
}
}
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.GradientInactiveCaption;
this.ClientSize = new System.Drawing.Size(397, 283);
this.ControlBox = false;
this.Controls.Add(this.label2);
this.Controls.Add(this.progressBar1);
this.Controls.Add(this.label1);
this.ForeColor = System.Drawing.SystemColors.ControlLightLight;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "Splash";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.ResumeLayout(false);
this.PerformLayout();
Puis dans votre application
sp = new Splash();
sp.ShowDialog();
Les autres réponses ici couvrent bien cela, mais il est bon de savoir qu'il existe une fonctionnalité intégrée pour les écrans de démarrage dans Visual Studio: Si vous ouvrez les propriétés du projet pour l'application de formulaire Windows et que vous consultez l'onglet Application, il existe un "écran de démarrage". : "option en bas. Vous choisissez simplement le formulaire de votre application que vous souhaitez afficher en tant qu'écran de démarrage. Celui-ci se chargera de l'afficher au démarrage de l'application et de le masquer une fois votre formulaire principal affiché.
Vous devez toujours configurer votre formulaire comme décrit ci-dessus (avec les bordures, le positionnement, le dimensionnement, etc. corrects)
Je voulais un écran de démarrage pouvant être affiché jusqu'à ce que le formulaire du programme principal soit prêt à être affiché. Les minuteries, etc. Je voulais aussi que ce soit aussi simple que possible . Mon application commence par (abrégé):
static void Main()
{
Splash frmSplash = new Splash();
frmSplash.Show();
Application.Run(new ReportExplorer(frmSplash));
}
Ensuite, ReportExplorer présente les éléments suivants:
public ReportExplorer(Splash frmSplash)
{
this.frmSplash = frmSplash;
InitializeComponent();
}
Enfin, après tout l'initialisation est terminée:
if (frmSplash != null)
{
frmSplash.Close();
frmSplash = null;
}
Peut-être me manque quelque chose, mais cela semble beaucoup plus facile que de se faufiler avec des threads et des minuteries.
Tout d'abord, vous devez créer un formulaire avec ou sans bordure (sans bordure est préférable pour ces choses)
public class SplashForm : Form
{
Form _Parent;
BackgroundWorker worker;
public SplashForm(Form parent)
{
InitializeComponent();
BackgroundWorker worker = new BackgroundWorker();
this.worker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.worker _DoWork);
backgroundWorker1.RunWorkerAsync();
_Parent = parent;
}
private void worker _DoWork(object sender, DoWorkEventArgs e)
{
Thread.sleep(500);
this.hide();
_Parent.show();
}
}
À Main, vous devriez utiliser ça
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new SplashForm());
}
}
Peut-être un peu tard pour répondre, mais je voudrais partager mon chemin ... J'ai trouvé un moyen facile avec des threads dans le programme principal pour une application Winform.
Disons que vous avez votre formulaire "splashscreen" avec une animation et votre "main" qui contient tout votre code d'application.
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Thread mythread;
mythread = new Thread(new ThreadStart(ThreadLoop));
mythread.Start();
Application.Run(new MainForm(mythread));
}
public static void ThreadLoop()
{
Application.Run(new SplashScreenForm());
}
Dans votre formulaire principal dans le constructeur:
public MainForm(Thread splashscreenthread)
{
InitializeComponent();
//add your constructor code
splashscreenthread.Abort();
}
De cette façon, l'écran de démarrage ne durera que le temps nécessaire au chargement de votre formulaire principal.
Votre formulaire d’écran d’ouverture doit avoir sa propre manière d’animer/d’afficher des informations ..__ Dans mon projet, mon écran d’ouverture affiche un nouveau fil, et toutes les x millisecondes, il modifie son image principale en une autre, ce qui donne l’illusion d’une rotation.
exemple de mon écran de démarrage:
int status = 0;
private bool IsRunning = false;
public Form1()
{
InitializeComponent();
StartAnimation();
}
public void StartAnimation()
{
backgroundWorker1.WorkerReportsProgress = false;
backgroundWorker1.WorkerSupportsCancellation = true;
IsRunning = true;
backgroundWorker1.RunWorkerAsync();
}
public void StopAnimation()
{
backgroundWorker1.CancelAsync();
}
delegate void UpdatingThreadAnimation();
public void UpdateAnimationFromThread()
{
try
{
if (label1.InvokeRequired == false)
{
UpdateAnimation();
}
else
{
UpdatingThreadAnimation d = new UpdatingThreadAnimation(UpdateAnimationFromThread);
this.Invoke(d, new object[] { });
}
}
catch(Exception e)
{
}
}
private void UpdateAnimation()
{
if(status ==0)
{
// mypicture.image = image1
}else if(status ==1)
{
// mypicture.image = image2
}
//doing as much as needed
status++;
if(status>1) //change here if you have more image, the idea is to set a cycle of images
{
status = 0;
}
this.Refresh();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
while (IsRunning == true)
{
System.Threading.Thread.Sleep(100);
UpdateAnimationFromThread();
}
}
J'espère que cela aidera certaines personnes .. Désolé de m'être trompé. L'anglais n'est pas ma langue maternelle.