J'ai une application Formulaires Windows C #. La façon dont je l'ai actuellement configurée, lorsque Form1_load () exécute qu'il vérifie les données non sauvegardées récupérées et s'il ne le trouve qu'il invite l'utilisateur s'ils veulent ouvrir ces données. Lorsque le programme fonctionne, cela fonctionne bien, mais la case Message est indiquée immédiatement et que le formulaire de programme principal (Form1) ne s'affiche pas avant que l'utilisateur clique sur Oui ou Non. J'aimerais que la forme1 apparaisse d'abord, puis l'invite de la boîte de message. p>
Maintenant pour contourner ce problème avant que j'ai créé une minuterie de mon formulaire, a démarré la minuterie de la méthode Form1_Load (), puis effectuée la vérification et l'invite d'utilisateur dans le premier événement de tick TIMER. Cette technique résout le problème mais semble être une meilleure façon. p>
Vous avez des idées meilleures? P>
Edit: Je pense avoir également utilisé un ouvrier de fond pour faire quelque chose de similaire. Il semble tout simplement que un peu goofy passe à travers toutes les difficultés d'invoquer la méthode à revenir au fil de formulaire et à toute cette merde pour le faire retarder quelques millisecondes! P>
4 Réponses :
J'utiliserais Form1_SHOWN () P>
Fantastique. Je ne me suis même pas réalisé que l'événement de form_SHOWN existait. Je peux dire que ça va être une bonne journée!
Je ne crois pas qu'il suggère l'événement. Je pense qu'il dirige-t-il à remplacer la méthode Sternown ()?
Événements ou remplacement. Événements, si vous ne changez pas de comportement. Remplacer, si vous êtes. Dans le contexte de la question, je voudrais remplacer.
Utiliser un Windows.Forms.Timer est une technique bonne, stable, bien connue et facile à comprendre pour faire ce que vous voulez. J'éviterais d'autres objets de minuterie. P> Li>
Le formulaire surcharge / remplacement de la méthode code> montre code>. (Ma technique préférée pour un meilleur contrôle.) Dans cette méthode, je ferais la vérification nécessaire. Lors de votre préparation, j'appellerais la méthode montré code> fonctionne bien. p> li>
base.show code>, puis effectuez tout autre traitement, tel que des boîtes de message, des invites, de la journalisation, ou autre. P> Li>
ul>
-1? Hey, pas de juste. J'étais au milieu de la modification. Vous ne pouvez pas un gars "post" afin de "pseudo-sauver"?
Étant donné que l'OP a dit explicitement qu'il veut que quelque chose se passe juste après la montée du formulaire à l'écran, vous ne pouvez pas obtenir i> plus approprié que le formulaire. Une minuterie est très maladroite pour cela: Si le chronométrage n'est pas parfait (et cela pourrait changer de machines différentes), le message peut figurer au milieu d'une autre action utilisateur. Et si vous allez utiliser des événements de toute façon, pourquoi utiliser le spectacle au lieu de montré?
J'aime prendre le contrôle. Montré est après. Spectacle est avant. Show me donne la possibilité d'afficher une forme, un message, une invite ou une autre différente. Montré est trop tard. La charge est trop tôt.
"Une minuterie est très maladroite pour cela". C'est pourquoi j'ai trois options. La façon dont nous utilisons pour le faire (qui fonctionne toujours), la voie de Winforms actuelle et une manière plus flexible. Cela donne aux idées des lecteurs sur différentes solutions possibles. Au lieu d'une réponse de trois mots ... Duh ... Utilisez l'événement montré ... Duh ... Votez pour moi; o)
"Si le chronométrage n'est pas parfait (et cela pourrait changer sur différentes machines) ... Le message pourrait montrer à ... Milieu d'une autre action utilisateur." Pas un bon argument car 1) Si cette technique ne fonctionnait pas, nous ne l'utiliserions pas. 2) "arriver juste après" peut être de 0 à 100 ms? À moins que le délai ne soit à quelques secondes, je ne peux pas voir de nombreux utilisateurs exécutant une autre opération après avoir simplement "ouvert" une fenêtre. 3) 100ms est de 100 ms sur n'importe quelle machine. Sinon, les ordinateurs ne seraient pas fiables. Utilisation de Windows.Forms.Timer n'est pas de perciser mais il suffit de ce cas "juste après".
Utilisez le Montré événement. Il semble convenir à ce dont vous avez besoin et d'afficher uniquement la première fois que le formulaire est affiché.
C'est vraiment pratique! Merci d'avoir partagé
J'essaie d'utiliser votre solution semble être que l'interface graphique est à la hausse mais elle ne rend pas le contrôleur jusqu'à ce qu'il finit les tâches de l'événement montré. Des conseils pour moi?
Les tags sont inappropriés. Vous devriez choisir "C #" "Winforms". Les balises doivent signifier la catégorie de question.
Ouais je n'étais pas sûr de quoi utiliser. Je l'ai réparé maintenant. Merci.
Pour une référence future, ce lien contient une liste de l'ordre des événements lors d'afficher un formulaire: msdn.microsoft.com/en-us/library/86faxx0d%28vs.80%29.aspx