2010-06-02 4 views
5

Ich habe eine C# Windows Forms-Anwendung. Die Art, wie ich es derzeit eingerichtet habe, wenn Form1_Load() ausgeführt wird, sucht nach wiederhergestellten ungesicherten Daten und wenn es einige findet, fragt es den Benutzer, ob sie diese Daten öffnen wollen. Wenn das Programm läuft, funktioniert es gut, aber das Meldungsfeld wird sofort angezeigt und das Hauptprogrammformular (Form1) wird erst angezeigt, wenn der Benutzer auf Ja oder Nein klickt. Ich möchte, dass zuerst das Form1 und dann die Meldung erscheint.Wie kann man eine Methode nach dem Laden eines Formulars am besten aufrufen?

Nun, um dieses Problem zu umgehen, bevor ich einen Timer in meinem Formular erstellt, den Timer in der Form1_Load() -Methode gestartet und führte dann die Überprüfung und Benutzereingabeaufforderung im ersten Timer Tick Event. Diese Technik löst das Problem, aber es scheint, als könnte es einen besseren Weg geben.

Habt ihr bessere Ideen?

Edit: Ich denke, ich habe auch einen Hintergrundarbeiter, etwas ähnliches zu tun. Es scheint nur irgendwie doof zu sein, all die Mühe zu machen, die Methode aufzurufen, um zum Formular-Thread und all dem Mist zurückzukehren, nur um es ein paar Millisekunden zu verzögern!

+0

Tags sind ungeeignet. Sie sollten "C#" "winforms" auswählen. Tags sollten die Kategorie der Frage bedeuten. – Andrey

+0

Ja, ich war mir nicht sicher, was ich benutzen sollte. Ich habe es jetzt behoben. Vielen Dank. – PICyourBrain

+1

Für zukünftige Referenz enthält dieser Link eine Liste der Reihenfolge der Ereignisse beim Anzeigen eines Formulars: http://msdn.microsoft.com/en-us/library/86faxx0d%28VS.80%29.aspx –

Antwort

13

würde ich Form1_Shown()

+1

Fantastic. Ich wusste nicht einmal, dass das Form_Shown-Ereignis existiert. Ich kann sagen, dass es ein guter Tag wird! – PICyourBrain

+0

Ich glaube nicht, dass er das Ereignis vorschlägt. Ich denke, dass er darauf hinweist, die OnShown() -Methode zu überschreiben? – Ian

+0

Ereignisse oder Außerkraftsetzung. Ereignisse, wenn Sie das Verhalten nicht ändern. Überschreiben, wenn Sie sind. Im Zusammenhang mit der Frage würde ich übersteuern. – AMissico

2
  • Mit einem Windows.Forms.Timer ist eine gute, stabile, gut bekannt und leicht verständliche Technik zu tun, was Sie wollen. Ich würde andere Timer-Objekte vermeiden.

  • Das Ereignis Shown des Formulars funktioniert gut.

  • Überladen/überschreiben Sie die Show Methode. (Meine bevorzugte Technik für eine bessere Kontrolle.) Bei dieser Methode würde ich die Überprüfung durchführen. Wenn ich fertig bin, rufe ich die Methode base.Show auf und führe dann jede andere Verarbeitung durch, wie z. B. Meldungsfelder, Eingabeaufforderungen, Protokollierung oder was auch immer.

+0

-1? Hey, nicht fair. Ich war mitten in der Bearbeitung. Kann ein Typ nicht "posten", um "pseudo-speichern" zu können? – AMissico

+2

Angesichts der Tatsache, dass das OP explizit gesagt hat, dass etwas passieren soll, nachdem das Formular auf dem Bildschirm angezeigt wird, können Sie * nicht * passender als form.Shown() sein. Ein Timer ist dafür sehr klobig: Wenn das Timing nicht perfekt ist (und es sich auf verschiedenen Rechnern ändern kann), wird die Nachricht möglicherweise mitten in einer anderen Benutzeraktion angezeigt. Und wenn Sie Veranstaltungen trotzdem nutzen wollen, warum sollten Sie Show statt Show? – Klay

+0

Ich mag es, die Kontrolle zu übernehmen. Gezeigt ist nach. Show ist vorher.Show gibt mir die Möglichkeit, eine andere Form, Nachricht, Aufforderung oder was auch immer zu zeigen. Gezeigt ist zu spät. Die Ladung ist zu früh. – AMissico

5

Verwenden Sie das Shown Ereignis. Es scheint zu entsprechen, was Sie brauchen, und wird nur angezeigt, wenn das Formular zum ersten Mal angezeigt wird.

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

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

Das ist wirklich praktisch! Vielen Dank für die Freigabe – Kryptic

+0

Ich versuche, Ihre Lösung zu verwenden scheint, wie die GUI ist, aber es rendern den Controller nicht, bis es Aufgaben auf dem Shown-Ereignis beendet. Irgendwelche Tipps für mich? –

Verwandte Themen