questo.Visible non funziona in Windows Form

Ho un problema. Ho bisogno di hide la finestra al carico della finestra. Ma

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

non funziona. E la proprietà Visible rimane vera. Mi sto perdendo qualcosa?

Sì, la proprietà Visible è un grosso problema in Windows Form, è ciò che effettivamente viene creato l’handle e causa l’esecuzione di OnLoad (). In altre parole, la finestra non esiste finché non diventa visibile. E ignorerà i tentativi di annullare questo.

È piuttosto comune voler ancora creare l’handle ma non rendere visibile la finestra se si usa un NotifyIcon. Puoi ottenere ciò sostituendo SetVisibleCore:

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

Attenzione che OnLoad continuerà a funzionare fino a quando la finestra non diventerà visibile, quindi muovere il codice nel costruttore, se necessario. Basta chiamare Show () nel gestore eventi del menu contestuale di NotifyIcon per rendere visibile la finestra.

Sembra che tu possa usare quanto segue:

  private void Form1_Load(object sender, EventArgs e) { this.Opacity = 0; this.ShowInTaskbar = false; } 

L’ho appena testato in un’app winforms e ha funzionato.

(Trovato anche questo: Single Form Hide all’avvio

Penso che non sia una buona idea impostare la visibilità dall’evento Load del modulo. Invece, lo farei aggiungendo un metodo pubblico:

 public void LoadForm(...) { // do the all the initializations } 

e chiama il metodo per caricare il modulo. Il modulo non dovrebbe essere visibile a meno che non lo mostri esplicitamente:

 MyForm instance = new MyForm(); instance.LoadForm(...); // instance.Show(); or ShowDialog() for dialog form not sure exactly the syntax. 

Metti la tua chiamata nel ciclo degli eventi di Windows in questo modo:

 WindowsFormsSynchronizationContext.Current.Post((obj) => this.Hide(), null); 

Quindi Hide() verrà invocato in seguito, quindi risolvere il problema.

Credo che questo sia perché la finestra non esiste realmente fino a dopo questo evento. Il posto migliore per farlo è fuori forma:

 if (x == 1) { form1.ShowForm(); } else { // Don't show the form } 

Se hai davvero bisogno di farlo all’interno del modulo stesso, allora penso che devi utilizzare l’evento triggersto.

MODIFICARE:

Puoi anche provare qualcosa come:

  static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 myform = new Form1(); if (myform.CheckStuff()) { Application.Run(myform); } } 

Usa this.Opacity = 0;

 this.Opacity = 0; this.ShowInTaskbar = false; 

Usa this.Hide() per hide la tua finestra. this.Close( ) per chiudere

Chiama Hide () nell’evento Mostrato, Hide () imposta solo Visible su false, e prima che venga mostrato il modulo la proprietà Visible è già falsa …