2010-06-02 18 views
5

J'ai une application C# Windows Forms. De la façon dont je l'ai actuellement configuré, lorsque Form1_Load() l'exécute, il vérifie les données non enregistrées récupérées et s'il en trouve, il invite l'utilisateur à ouvrir ces données. Lorsque le programme s'exécute, cela fonctionne, mais la boîte de message s'affiche immédiatement et le formulaire de programme principal (Form1) n'apparaît que lorsque l'utilisateur clique sur Oui ou Non. Je voudrais que le Form1 apparaisse d'abord, puis l'invite de boîte de message. Maintenant, pour contourner ce problème avant d'avoir créé une minuterie dans mon formulaire, a démarré le minuteur dans la méthode Form1_Load(), puis a effectué l'invite de vérification et d'utilisateur dans le premier événement Timer minuterie. Cette technique résout le problème, mais il semble qu'il pourrait y avoir un meilleur moyen.Quelle est la meilleure façon d'appeler une méthode juste après le chargement d'un formulaire?

Avez-vous de meilleures idées? Editer: Je pense que j'ai aussi utilisé un travailleur de fond pour faire quelque chose de similaire. Il semble juste un peu loufoque de passer par tous les moyens d'invoquer la méthode pour revenir au fil du formulaire et à toutes ces conneries juste pour l'avoir retardé de quelques millisecondes!

+0

Les balises sont inappropriées. vous devriez choisir "C#" "winforms". les tags devraient signifier la catégorie de question. – Andrey

+0

Ouais je ne savais pas quoi utiliser. Je l'ai réparé maintenant. Merci. – PICyourBrain

+1

Pour référence future, ce lien contient une liste de l'ordre des événements lors de l'affichage d'un formulaire: http://msdn.microsoft.com/en-us/library/86faxx0d%28VS.80%29.aspx –

Répondre

13

J'utilise Form1_Shown()

+1

Fantastique. Je n'ai même pas réalisé que l'événement Form_Shown existait. Je peux dire que ça va être une bonne journée! – PICyourBrain

+0

Je ne crois pas qu'il suggère l'événement. Je pense qu'il pointe sur l'annulation de la méthode OnShown()? – Ian

+0

Événements ou dépassement. Evénements, si vous ne changez pas de comportement. Overriding, si vous êtes. Dans le contexte de la question, je remplacerais. – AMissico

2
  • L'utilisation d'un Windows.Forms.Timer est une bonne technique stable, bien connue et facile à comprendre pour faire ce que vous voulez. J'éviterais tout autre objet de minuterie. L'événement Shown de la fiche fonctionne correctement.

  • Surcharge/remplace la méthode Show. (Ma technique préférée pour un meilleur contrôle.) Dans cette méthode, je ferais la vérification nécessaire. Une fois prêt, j'appellerais la méthode base.Show, puis ferais n'importe quel autre traitement, tel que les boîtes de message, les invites, la consignation, ou peu importe.

+0

-1? Hey, pas juste. J'étais au milieu de l'édition. Un mec ne peut-il pas "poster" pour "pseudo-sauvegarder"? – AMissico

+2

Étant donné que l'OP a explicitement dit qu'il veut que quelque chose se passe juste après que le formulaire soit affiché à l'écran, vous ne pouvez pas * obtenir * plus approprié que form.Shown(). Un minuteur est très maladroit pour cela: si le timing n'est pas parfait (et qu'il peut changer sur des machines différentes) alors le message peut s'afficher au milieu d'une autre action de l'utilisateur. Et si vous utilisez des événements de toute façon, pourquoi utiliser Afficher au lieu de Illustré? – Klay

+0

J'aime prendre le contrôle. Montré est après. Le spectacle est avant.Montrer me donne la possibilité de montrer une forme, un message, une invite, ou autre. Montré est trop tard. La charge est trop tôt. – AMissico

5

Utilisez l'événement Shown. Il semble convenir à ce dont vous avez besoin et affichera uniquement la première fois que le formulaire est affiché.

Form f1 = new Form(); 
f1.Shown += new EventHandler(f1_Shown); 

public void f1_Shown(object sender, EventArgs e) 
{ 
    // Show dialog in here 
} 
+0

C'est vraiment pratique! Merci pour le partage – Kryptic

+0

J'essaie d'utiliser votre solution semble que l'interface graphique est en place, mais il ne rend pas le contrôleur jusqu'à ce qu'il termine les tâches sur l'événement affiché. Des conseils pour moi? –