C#: montrer un formulaire invisible
J'ai le code suivant en C#:
Form f = new MyForm();
f.Visible = false;
f.Show();
f.Close();
Malgré la f.Visible = false
, je vois un flash de la forme apparaissant puis disparaissant. Que dois-je faire pour faire de cette forme invisible?
J'ai besoin d'afficher le formulaire (invisible) pendant le démarrage de mon application, car cela enlève un démarrage à froid de retard lors de la démonstration de ce formulaire.
- Pourquoi montrez-vous, puis de le fermer?
- Ma première question serait, pourquoi avez-vous besoin d'Afficher un formulaire, puis immédiatement à la fermer? Il y a peut être une meilleure approche.
- Pourquoi essayez-vous de le faire? Si vous souhaitez que le formulaire toujours invisible, peut-être que le code ne doit pas être en forme.
- si vous avez un peu de logique dans le myForm OnShow, déplacer la charge ou, encore mieux, séparées de la méthode publique qui on pourrait appeler de l'extérieur de sorte que vous n'aurez même pas besoin de le montrer.
- Je suis en train d'améliorer un problème de démarrage à froid en montrant ce formulaire lors de l'écran de démarrage de l'application. Il résout le problème, mais la forme clignote sur l'écran.
- OK Craig, voir ma réponse.
- celui qui est de l'écran de démarrage.. ce formulaire ou de toute autre forme
- l'écran de démarrage est une forme différente
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez afficher le formulaire sans réellement le voir, vous pouvez faire ceci:
Si plus tard vous voulez le montrer, vous pouvez simplement changer le tout. Voici un exemple au bout de 10 secondes, il montre la forme:
De loin la façon la plus simple de garder une forme invisible, c'est juste par ne pas le montrer. C'est une grosse affaire en Winforms, l'appel Show() ou définir la propriété Visible sur true (la même chose) un beaucoup de choses. C'est la façon dont la fenêtre Windows native est créé. Dans typique .NET "paresseux" de la mode. Toute tentative de rendre Visible le dos à faux (comme dans OnLoad) sera vaincu.
Techniquement c'est possible, vous devez remplacer la SetVisibleCore() la méthode. Comme ceci:
Cela garantit que la fenêtre ne devient pas visible de la première fois que vous appelez Show(). Ce qui est bien pratique quand vous avez des NotifyIcon par exemple, vous souhaitez généralement les directement par l'icône dans la zone de notification et de n'afficher qu'une fenêtre lorsque l'utilisateur clique sur l'icône. Méfiez-vous que OnLoad() ne fonctionne pas jusqu'à ce que la fenêtre devient réellement visibles, afin de passer le code dans le constructeur ou le remplacer si nécessaire.
Tout simplement Parce que
f.Show()
est de rendre le formulaire de nouveau Visible etf.Close()
est de le fermer... donc le flash.Si vous voyez le MSDN doc pour la Forme.Show() méthode qu'il mentionne clairement que:
Si vous ne voulez pas que le flash ne le montrent pas la Forme du tout.
Vous avez besoin de modifier le Formulaire de classe, et ajoutez les éléments suivants remplacer la méthode:
Vous devriez vous demander si cela est vraiment nécessaire, cependant - sans doute indicative d'une mauvaise conception vraiment.
Modifier:
C'est assez rare que vous avez besoin pour ce faire, la situation que j'ai utilisé c'est quand j'ai besoin d'un formulaire j'ai pu placer un composant COM sur (depuis le composant COM besoin d'un handle de Fenêtre), et j'ai eu à exécuter l'Application.Exécuter(formInstance) qui appelle la méthode Afficher de la forme. En forçant le formulaire pour toujours invisible, vous bénéficiez d'un handle de fenêtre et une boucle de message sans rien voir sur l'écran.
J'ai créé la méthode d'assistance que de montrer de forme invisible et suivantes
Show
appels afficher la fenêtre comme d'habitude:De sorte formulaire sera rendu (et
Load
événement déclencheur), sans cligner des yeux.