c# winforms visible

c# - this.Visible no está funcionando en Windows Forms



winforms (9)

Tengo un problema. Necesito ocultar mi ventana en la ventana de carga. Pero

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

no está trabajando. Y la propiedad Visible sigue siendo verdad. ¿Me estoy perdiendo de algo?


Creo que esto se debe a que la ventana no existe realmente hasta después de este evento. El mejor lugar para hacer esto es fuera del formulario:

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

Si realmente necesita hacerlo dentro del formulario, creo que necesita usar el evento Activado.

EDITAR:

También puedes probar algo como:

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


Creo que no es una buena idea establecer la visibilidad desde el evento Load del formulario. En su lugar, lo haría añadiendo un método público:

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

y llamar al método para cargar el formulario. El formulario no debe ser visible a menos que lo muestres explícitamente:

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


Ocultar () en el evento Mostrado, Ocultar () solo establece Visible en falso, y antes de que se muestre el formulario, la propiedad Visible ya es falsa ...


Parece que puedes usar lo siguiente:

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

Acabo de probarlo en una aplicación de winforms y funcionó.

(También acabo de encontrar esto: Ocultar formulario único en el inicio


Ponga su llamada en el bucle de eventos de Windows de esta manera:

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

Así que Hide() se invocará más tarde, por lo tanto, solucione su problema.


Sí, la propiedad Visible es un gran problema en Windows Forms, eso es lo que realmente hace que se cree el identificador y hace que se ejecute OnLoad (). En otras palabras, la ventana no existe hasta que se hace visible. E ignorará los intentos de deshacer esto.

Es bastante común querer seguir creando el manejador pero no hacer que la ventana sea visible si usa un NotifyIcon. Puede lograr esto anulando SetVisibleCore:

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

Tenga en cuenta que OnLoad aún no se ejecutará hasta que la ventana se haga visible, de modo que mueva el código al constructor si es necesario. Simplemente llame a Show () en el controlador de eventos del menú contextual de NotifyIcon para que la ventana sea visible.


Usa esto. this.Hide() para ocultar tu ventana. this.Close( ) para cerrar


Utilice this.Opacity = 0;


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