perché non è this.Hide () che funziona in evento Form1_load?

Ho in realtà un classico modulo di Windows e un pulsante. Ho questo codice

private void Form1_Load(object sender, EventArgs e) { this.Hide(); this.Visible = false; } private void button1_Click(object sender, EventArgs e) { this.Hide(); } 

Mi piacerebbe sapere perché non si nasconde la forma appena dopo il caricamento ma funziona quando faccio clic su quel pulsante? Qualcuno può spiegarlo?

L’evento Load si triggers prima che il modulo sia effettivamente visibile. Prova a utilizzare l’evento Form.Shown . Questo si triggers quando il modulo viene effettivamente dipinto sullo schermo.

Perché stai chiamando Hide () prima che venga mostrato il modulo.

http://msdn.microsoft.com/en-us/library/86faxx0d.aspx

La proprietà Visible è un grosso problema per le forms. Si collega al tradizionale modello di programmazione .NET di allocare sempre risorse solo all’ultimo momento. Pigro.

L’evento Load viene generato subito dopo la creazione della finestra nativa di Windows, appena prima che diventi visibile all’utente. È l’atto di impostare Visible = true che triggers questa catena di eventi. O più in genere, chiamando il metodo Show (). Esattamente la stessa cosa Fino ad allora non importa la finestra nativa.

Tuttavia, questo ha un effetto collaterale, non puoi impostare Visible su false (o chiamare Hide, stessa cosa) mentre è in fase di impostazione Visible = true. Ecco perché il tuo codice non funziona.

È ansible ottenere ciò che si desidera, non terribilmente inusuale se si dispone di un NotifyIcon e non si desidera rendere visibile la finestra finché l’utente non fa clic sull’icona. La NI non può funzionare finché non viene creato il modulo. Fai in modo che assomigli a questo:

  protected override void SetVisibleCore(bool value) { if (!IsHandleCreated && value) { base.CreateHandle(); value = false; } base.SetVisibleCore(value); } 

Che ti consente di chiamare Show () per la prima volta, ma in realtà non ottiene una finestra visibile. Si comporta normalmente dopo questo. Attenzione che l’evento Load non verrà eseguito, è meglio non usarlo.