2010-09-22 15 views
8

me quería ocultar la ventana principal de mi aplicación en el arranque, por lo que poner esto en el constructor:Ocultar formularios en el inicio: ¿por qué esto no.Esconde() ocultar mi formulario?

this.Hide(); 

Esto no ocultar mi forma embargo. Parece que solo puedo obtener botones para ocultar el formulario. ¿Estoy haciendo algo mal aquí?

+0

posible duplicado de [this.Visible no está funcionando en Windows Forms] (http: // stackoverflow. com/questions/3742709/this-visible-is-not-working-in-windows-forms) –

Respuesta

20

puede utilizar esta línea de código. No lo puedo ocultarlo, pero va a ser minimizado:

this.WindowState = FormWindowState.Minimized; 

Además, si usted no quiere que se muestra en la barra de tareas o bien, puede agregar esta línea:

this.ShowInTaskbar = false; 

Pero por qué ¿Creas el formulario si no quieres que sea visible en primer lugar?

+0

Porque comenzará con Windows y residirá en la bandeja del sistema de forma similar al software antivirus y de firewall. ¿Alguna idea de por qué 'this.Hide()' en realidad no oculta el formulario cuando se le llama desde el constructor del formulario? – Pieter

+1

Creo que esto se debe a que en este punto (cuando se ejecuta el constructor) su formulario aún no se ha hecho visible. Solo después de que el constructor finalice, el formulario se creará y se hará visible. Entonces, tu único problema por el que esto no funciona es porque está hecho desde el constructor. No sugiero esto como una solución, sino como un experimento, hacer un temporizador y comenzar desde el constructor con un retraso de 1 segundo, y tener el método timer_tick ocultar el formulario. Esto funcionará, ya que en el momento de llamar a esto. Ocultar() el formulario estará visible. –

+0

Obtiene el mismo problema cuando tiene una construcción como esta en program.cs: Application.Run (new Form1()); e intenta escribir Application.Exit() en el constructor de Form1. Después de la llamada a Application.Exit(), su aplicación seguirá activa y activa, y esto se debe a que el constructor se ejecuta antes que Application.Run y, por lo tanto, no tendrá ningún efecto. Entonces el mismo problema para ti. Lo haces oculto, solo para tener Application.Run hacerlo vivible y patear de nuevo. –

0

Intente establecer la propiedad visible del formulario en falso antes de que se cargue en el punto de entrada principal de su aplicación.

Form1 obj = new Form1(); 
obj.visible = false; 
Application.Run(obj); 

O intente establecer las coordenadas de la forma más alta de ubicación como 9000, 9000.

+0

Esto no es una solución. Necesita utilizar la anulación de OnVisibleChanged. Véase más arriba. –

+0

No coloque el formulario fuera de la pantalla, pero aún visible. Los usuarios ciegos que usen el software del lector de pantalla aún lo "verán" (al igual que los usuarios que usan alt-tab). –

11

Sólo reemplazar el método OnVisibleChanged y cambiar la visibilidad de la forma en la que hay, algo como esto:

protected override void OnVisibleChanged(EventArgs e) 
{ 
    base.OnVisibleChanged(e); 
    this.Visible = false; 
} 

Y eso es todo! Simple y limpio.

+0

Esta es la solución de trabajo. Llame a la función Hide() de formulario y coloque el código anterior. Gracias :) –

+0

Esta es la única solución que funcionó para mí. – tavlima

0

Intenté hacer esto estableciendo Visible en falso u ocultándome en el constructor y en el evento OnLoad.

Ninguno de estos tuvo ningún efecto, ya que el formulario se establece en Visible después de que se crea el formulario y después de que se desencadena el evento OnLoad, en SetVisibleCore.

Configurar el formulario oculto en el evento Mostrado funciona, pero el formulario parpadea en la pantalla por un momento.

También puede anular SetVisibleCore y establecer el valor en falso, pero luego OnLoad no se activa y algunos de los demás eventos se arruinan, como el cierre de formularios.

La mejor solución en mi opinión es establecer el formulario minimizado y no se muestra en la barra de tareas antes de llamar a Application.Run().

Así que en lugar de:

Application.Run(new MainForm()); 

hacer:

MainForm form = new MainForm(); 
form.WindowState = FormWindowState.Minimized; 
form.ShowInTaskbar = false; 

Application.Run(form); 

A continuación, la aplicación se ejecutará con todos los eventos apropiados despedido (incluso OnShown) y no se mostrará el formulario.

Si desea poder ocultar/mostrar el formulario como normal después de eso, entonces debe volver a configurar WindowState y ShowInTaskbar en Normal y verdadero.

En el evento Mostrado, puede establecer ShownInTaskbar en verdadero y luego ocultar correctamente el formulario.

this.Shown += new System.EventHandler(this.MainFormShown); 

...

void MainFormShown(object sender, EventArgs e) 
{ 
    this.ShowInTaskbar = true; 
    this.Visible = false; 
} 

Ajustes del WindowState de nuevo a normal, mientras que el formulario está oculto no tiene ningún efecto, por lo que tendrá que hacerlo después de mostrar el formulario de nuevo, de lo contrario el icono estar en la barra de tareas pero el formulario se minimizará.

this.Show(); 
this.WindowState = FormWindowState.Normal; 
+0

La solución de trabajo está arriba. Esto no funcionará. –

+0

La solución de solución de trabajo anterior no funcionó para mí. Hacía que la ventana parpadeara momentáneamente en la pantalla antes de ocultarse. También le impide mostrar el formulario después. Este método funcionó bien para mí. –

3

Si prefiere utilizar this.Hide o this.Show puede hacerlo

protected override void OnShown(EventArgs e) 
{ 
    base.OnShown(e); 
    this.Hide(); 
}