Mein Ansatz für die akzeptierte Antwort von TCKS ähnlich ist. Das Problem, dem ich gegenüberstand, war, dass ich einen Event-Handler für eine Gruppe von Steuerelementen hatte, die auf VisibleChanged reagierten, wobei der Event-Handler Steuerelemente innerhalb eines Panels bewegte. Problem war (natürlich), dass sich die Sichtbarkeit ändert, wenn das Formular zum ersten Mal geladen wird - aber nach dem .Load() - Ereignis.
I erstellt und einen Bool Wert für das Formular festgelegt:
private bool formShown = false;
und fügte dann die folgende Zeile in der Form_Load()
this.Paint += (s, args) => { formShown = true; };
mit der ersten Zeile meines Visible() Ereignis Handler wie:
if(!formShown) { return; }
Prägnant und funktional.
Ich kann nicht glauben, dass niemand das noch heraufgebracht hat ... base.Load (e); erzeugt einen Fehler, 'Das Ereignis 'System.Windows.Forms.Form.Load' kann nur auf der linken Seite von + = oder - =' erscheinen. Aber diese Methode funktioniert immer noch nicht für mich. Die OnLoadComplete() wird ausgelöst, bevor das Formular gerade angezeigt wird. :( –
Das ist wahrscheinlich, weil etwas die Methode OnPaint() aufgerufen hat, bevor das Formular angezeigt wird.Versuchen Sie, dort einen Breakpoint zu setzen und untersuchen Sie den Callstack. – TcKs
Ich habe eine brandneue Anwendung und NUR haben die App folgendes tun. Die App startet und nachdem das Formular vollständig fertig ist, wird ein Begrüßungsbildschirm angezeigt. Aus dem, was ich sehen kann, ist dies die Reihenfolge der Ereignisse ... frm1: OnLoad startet, frm1: Laden beginnt, frm1: Laden beendet, frm1: OnLoad endet, frm1: OnPaint startet, frm2: Laden beginnt, frm2: Laden endet , frm2: DoubleClick startet, frm2: schließt, frm2: DoubleClick stoppt, frm1: OnPaint endet. Also, frm1 lädt und bevor es auftaucht (auf halbem Weg), erscheint frm2 sofort, dann nimmt frm1 wieder den Fokus, dann nimmt frm2 den letzten Fokus. Hinweis: frm2 ist randlos. –