Por lo general, sólo se estaría haciendo esto cuando se utiliza un icono de la bandeja o algún otro método para mostrar la forma más tarde, pero funcionará muy bien incluso si nunca muestra su formulario principal.
Crear un bool en su clase de formulario que está por defecto en falso:
private bool allowshowdisplay = false;
A continuación, reemplazar el método SetVisibleCore
protected override void SetVisibleCore(bool value)
{
base.SetVisibleCore(allowshowdisplay ? value : allowshowdisplay);
}
Debido Application.Run() establece las formas .Visible = true después carga la forma en que esto interceptará eso y lo establecerá en falso. En el caso anterior, siempre lo configurará en falso hasta que lo habilite estableciendo allowshowdisplay en verdadero.
Ahora que mantendrá la forma de mostrar en el inicio, ahora tiene que volver a habilitar SetVisibleCore para que funcione correctamente configurando allowshowdisplay = true. Querrá hacer esto en cualquier función de interfaz de usuario que muestre el formulario. En mi ejemplo es el evento de clic izquierdo en mi objeto notiyicon:
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
this.allowshowdisplay = true;
this.Visible = !this.Visible;
}
}
Por lejos, la mejor (y una de las soluciones más simples) que he visto. Toda la basura sobre el establecimiento de la opacidad a cero, tener instancias de temporizador separadas para ocultar el formulario, etc., tienen olor a código durante días. – nathanchere
Usando este método, ¿todavía se encontrará con 'Process.MainWindowHandle' y similares? – Sebastian
El diseñador no tiene una propiedad visible por lo que puedo ver. –