C#, winforms de démarrage (Splash) forme en ne cachant pas
J'ai une application winforms dans lequel je suis à l'aide de 2 Formulaires pour afficher tous les contrôles nécessaires. La première Forme est celle d'un écran de démarrage dans lequel il indique à l'utilisateur qu'il le chargement etc. Donc je suis en utilisant le code suivant:
Application.Run( new SplashForm() );
Une fois que l'application a fini de charger, je veux le SplashForm pour masquer ou m'envoyé à l'arrière et d'être montrer. Je suis actuellement en utilisant le suivant:
private void showMainForm()
{
this.Hide();
this.SendToBack();
//Show the GUI
mainForm.Show();
mainForm.BringToFront();
}
Ce que je vois, c'est que la MainForm est indiqué, mais le SplashForm est toujours visible 'en haut'. Ce que je suis en train de faire est de cliquer sur la MainForm manuellement l'amener à l'avant. Toutes les idées sur le pourquoi de ce qui se passe?
OriginalL'auteur TK. | 2009-02-04
Vous devez vous connecter pour publier un commentaire.
Probablement vous voulez juste pour fermer le carter de forme, et de ne pas l'envoyer à l'arrière.
Je lance le splash forme sur un thread séparé (c'est la classe SplashForm):
et le programme principal de la fonction ressemble à ceci:
Je l'utilise seulement pour les WinForms, désolé.
J'ai défini une variable comme "frmSplash splashForm" dans votre classe, mais j'obtiens des erreurs comme "Une référence d'objet est requise pour la non-statique champ, une méthode ou une propriété" pour la variable définie. comment puis-je utiliser à partir de votre classe?
J'ai eu un problème bizarre où mon écran d'accueil qui n'était pas dans un thread séparé a bien fonctionné dans Win7 mais sous XP il est resté en dessous d'autres choses, malgré un BringToFront(). J'ai ajouté le code ci-dessus pour le mettre dans son propre thread et il se comporte maintenant comme prévu! Donc, merci.
OriginalL'auteur Grzenio
Ceci est crucial pour éviter que votre écran de démarrage à partir de voler votre attention et en poussant votre formulaire principal à l'arrière-plan après la fermeture:
Ajoutez à cela de vous éclabousser classe de formulaire.
OriginalL'auteur Luke
Si j'ai bien compris, vous devriez utiliser l'Application.Exécuter sur votre formulaire principal. Donc, soit montrer votre splash d'abord juste en utilisant quelque chose comme:
Et puis le fermer manuellement dans MySplash chaque fois que vous voulez.
Ou de l'afficher dans vos principales formes de Chargement gestionnaire d'événement, puis attendre qu'il fermer ou que ce soit jusqu'à ce que vous laissez la méthode de Chargement complet. (Éventuellement paramètre Visible sur false avant de vous le montrer et de retour à vrai par la suite.
OriginalL'auteur Svish
Je crois qu'il pourrait être un défaut de conception dans ma conception actuelle!
Je pense que la meilleure Façon d'obtenir ce dont j'ai besoin est d'avoir tout contrôlé à partir de la MainForm. Donc, je peux utiliser:
Ce sera ensuite responsable de l'apparition/mise à jour/masquer l'écran d'accueil. De cette façon, je peux avoir le nécessaire complexe intactions avec le reste du système géré par la MainForm.
OriginalL'auteur TK.