visual padres otro ocultar llamar hijos hacer formularios formulario desde dentro como cerrar anterior abrir c# .net winforms events visibility

padres - C#/. NET-WinForms-Crear una instancia de un formulario sin mostrarlo



hacer visible un formulario en c# (17)

Estoy cambiando la visibilidad de un formulario a falso durante el evento de carga Y el formulario aún se muestra. ¿Cuál es el evento correcto para vincular esto? Visible = falso; ¿a? Me gustaría crear una instancia de Form1 sin mostrarlo.

using System; using System.Windows.Forms; namespace TestClient { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.Visible = false; } } }


¿Qué hay de establecer la propiedad Opacity en 0 en el diseño y volver a 100 cuando desea mostrar el formulario?


El evento mostrado puede darle el deseo que desee. Aunque la forma "parpadeará" por un segundo antes de ocultarse.

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


Establezca la visibilidad en el constructor, después de init y luego this.Show () más tarde


Estoy de acuerdo en que esto puede ser realmente enloquecedor, porque las formas de Winforms usualmente no se ven bonitas mientras están inicializando un grupo de controles o ocupando un gran DataGridView o lo que sea. Aún necesita el identificador de ventana para existir antes de que pueda hacer eso, creando todos los problemas que se han mencionado.

Aquí hay algo que me ha funcionado, y tiene dos opciones: puede ocultar su formulario principal hasta que esté listo, o puede mostrar una especie de pequeña pantalla de presentación para que su usuario sepa que está trabajando en ello. Disfrutar.

public partial class MainForm : Form { public MainForm() { InitializeComponent(); } Size mDeferredSize; protected override void OnHandleCreated(EventArgs e) { // Capture the "real" size... mDeferredSize = Size; // and set it to nothing... Size = new Size(0, 0); DoSomeUglyInitialization(showOptionalSplash: true); Size = mDeferredSize; // ...and now put it back to the original size base.OnHandleCreated(e); } private void DoSomeUglyInitialization(bool showOptionalSplash) { MySplash splash = null; if (showOptionalSplash) { // We have made some borderless form class with a logo or something... splash = new MySplash(); splash.Show(); } // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv // Initialization that REQUIRES A HANDLE, e,g, // we might be creating a bunch of controls, or // populating a big DataGridView. Whatever it is, // we don''t want everyone looking at our biz. System.Threading.Thread.Sleep(2500); // (Here simulated...) // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ splash?.Dispose(); } }


Has probado

this.Hide();

en los eventos form_load o form_activated


Independientemente de cuánto intente establecer la propiedad visible antes de que se muestre el formulario, aparecerá. Según tengo entendido, esto se debe a que es el MainForm del ApplicationContext actual. Una forma de que el formulario se cargue automáticamente, pero no se muestre al inicio de la aplicación, es alterar el método Principal. Por defecto, se ve algo como esto (.NET 2.0 VS2005):

[STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }

Si en su lugar hace algo como esto, la aplicación se iniciará, cargará su formulario y se ejecutará, pero el formulario no se mostrará:

[STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 f = new Form1(); Application.Run(); }

No estoy del todo seguro de cómo esto es útil, pero espero que lo sepas; o)

Actualización: parece que no necesita establecer la propiedad Visible en falso, o suministrar una instancia de ApplicationContext (que se creará automáticamente para usted "debajo del capó"). Acorté el código en consecuencia.


InitializeComponent () está estableciendo this.Visible = true, ya que especificó que el formulario debería estar visible en el diseñador (o de manera predeterminada). Debe establecer Visible en falso en el diseñador, y InitializeComponent () no lo llamará. Luego puede hacer que sea visible cuando lo desee.


Lo que sugeriría sería crear una instancia del formulario en un evento que preceda al evento _Show, como el constructor, después de la llamada a IntializeComponent ().


Me llevó algo de tiempo encontrar una solución que funcionara correctamente.

Establezca las propiedades denominadas WindowState en Minimized y ShowInTaskbar en False en la ventana de propiedades. Una vez que su formulario esté completamente cargado, llame a las líneas de código a continuación.

this.ShowInTaskbar = true; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; //this.WindowState = System.Windows.Forms.FormWindowState.Normal;

PD: esta solución está probada en Visual C # 2008 Express Edition


Para una solución Mostrada sin parpadeo, también establezca la ubicación del formulario fuera de la pantalla durante la carga:

private Point startuplocation; private void Form1_Load(object sender, EventArgs e) { this.startuplocation = this.Location; this.Location = new Point(-1000, -1000); } private void Form1_Shown(object sender, EventArgs e) //fires first time shown { this.Visible = false; this.Location = this.startuplocation; }


Pruebe el evento VisibleChanged.


Sé que esta es una vieja pregunta, pero acabo de tropezar con ella y estoy bastante sorprendido de que nadie haya mencionado SetVisibleCore :

bool isVisibleCore = false; protected override void SetVisibleCore(bool value) { base.SetVisibleCore(isVisibleCore); }

En ese fragmento de código, siempre que isVisibleCore siga siendo falso, el formulario permanecerá invisible. Si se establece en falso cuando se crea una instancia del formulario, no obtendrá ese breve destello de visibilidad que obtendría si establece Visible = false en el evento Mostrado.


Sí, la manera más elegante en perspectiva para su código que su visual de aplicaciones es parpadear el formulario ocultándose en el evento constructor / load.


Si esta es su forma principal, puede que no haya un lugar mejor que el evento Mostrado. Pero en ese caso obtendrás parpadeo.

No pude encontrar un buen lugar para evitar que una forma principal en ejecución se muestre al menos rápidamente. Incluso un temporizador activado en el evento de carga no lo hará.

Si es una forma secundaria, solo créela pero no la muestre.


Simplemente cree una instancia de Form1 y no llame a los métodos para mostrarla / mostrarla. Pero apuesto a que estás haciendo algo mal.


Tener .Visible = false u Hide() en el evento Load hará que su formulario se muestre brevemente, ya que hay un tiempo entre cuando se vuelve físicamente visible y cuando se dispara el evento Load , a pesar del hecho de que la documentación dice lo contrario .

¿Estás llamando a Show() o ShowDialog() alguna parte? No estoy seguro de si este comportamiento aún está presente, pero al menos en versiones anteriores del marco una llamada a ShowDialog() no desencadenó el evento Load , así que tal vez ese sea su problema (aunque creo que llamar a ShowDialog() luego ocultarlo ¡una forma modal sería una mala práctica!)

Si tiene que tener el asa creada (y los controladores para los controles) para lo que sea que esté tratando de hacer, una mejor idea sería establecer el StartLocation en Manual , luego establecer la propiedad Position en una ubicación fuera de pantalla. Esto creará y mostrará el formulario, mientras lo hace invisible para el usuario.


una solución con la que puedo vivir, por lo que se crea el formulario y se invoca on_load en la creación. establecer WindowState para minimizar y luego en el conjunto de carga visible a falso y windowstate a normal

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

lo que no funcionó:

la solución de anulación SetVisibleCore no creó la forma

como también el

Application { Form1 f = new Form1(); Application.Run();

)