c# - bunifu - firebase vb net
Single Form Hide en el inicio (20)
¿Por qué le gusta eso?
¿Por qué no simplemente comenzar como una aplicación de consola y mostrar el formulario cuando sea necesario? No hay más que algunas referencias que separan una aplicación de consola de una aplicación de formularios.
No es necesario ser codicioso y tomar la memoria necesaria para el formulario cuando ni siquiera lo necesite.
Tengo una aplicación con un formulario, y en el método Load necesito ocultar el formulario.
El formulario se mostrará solo cuando sea necesario (piense en las líneas de una ventana emergente de estilo de Outlook 2003), pero no puedo ''averiguar cómo ocultar el formulario en la carga sin algo desordenado.
¿Alguna sugerencia?
Anular OnVisibleCambio en formulario
protected override void OnVisibleChanged(EventArgs e)
{
this.Visible = false;
base.OnVisibleChanged(e);
}
Puedes agregar el disparador si es necesario que lo muestres en algún momento
public partial class MainForm : Form
{
public bool hideForm = true;
...
public MainForm (bool hideForm)
{
this.hideForm = hideForm;
InitializeComponent();
}
...
protected override void OnVisibleChanged(EventArgs e)
{
if (this.hideForm)
this.Visible = false;
base.OnVisibleChanged(e);
}
...
}
Aquí hay un enfoque simple:
Está en C # (no tengo el compilador de VB en este momento)
public Form1()
{
InitializeComponent();
Hide(); // Also Visible = false can be used
}
private void Form1_Load(object sender, EventArgs e)
{
Thread.Sleep(10000);
Show(); // Or visible = true;
}
Basado en varias sugerencias, todo lo que tuve que hacer fue esto:
Para ocultar el formulario:
Me.Opacity = 0
Me.ShowInTaskbar = false
Para mostrar el formulario:
Me.Opacity = 100
Me.ShowInTaskbar = true
Como complemento a la respuesta de Groky (que en realidad es la mejor respuesta, desde mi punto de vista), también podríamos mencionar la clase ApplicationContext , que también permite (como se muestra en la muestra del artículo) la posibilidad de abrir dos (o incluso más) Formularios en el inicio de la aplicación, y controle la vida útil de la aplicación con todos ellos.
Deberá configurar el estado de la ventana para minimizar y mostrar en la barra de tareas en falso. Luego, al final de sus formularios, cargue el estado de la ventana configurada para maximizar y muestre en la barra de tareas a verdadero
public frmMain()
{
Program.MainForm = this;
InitializeComponent();
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
}
private void frmMain_Load(object sender, EventArgs e)
{
//Do heavy things here
//At the end do this
this.WindowState = FormWindowState.Maximized;
this.ShowInTaskbar = true;
}
En el diseñador, establezca la propiedad Visible del formulario en falso. Luego evite llamar a Show () hasta que lo necesite.
Un mejor paradigma es no crear una instancia de la forma hasta que la necesite.
En el momento de la construcción del formulario (Diseñador, Programa principal o Constructor de formularios, según sus objetivos),
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
Cuando necesite mostrar el formulario, presumiblemente en evento de NotifyIcon, invierta según sea necesario,
if (!this.ShowInTaskbar)
this.ShowInTaskbar = true;
if (this.WindowState == FormWindowState.Minimized)
this.WindowState = FormWindowState.Normal;
Los sucesos de show / hide sucesivos pueden usar más simplemente la propiedad Visible del formulario o los métodos Mostrar / Ocultar.
Este ejemplo admite la invisibilidad total, así como solo NotifyIcon en la bandeja del sistema, sin clics y mucho más.
Más aquí: http://code.msdn.microsoft.com/TheNotifyIconExample
Esto funciona perfectamente para mi:
[STAThread]
static void Main()
{
try
{
frmBase frm = new frmBase();
Application.Run();
}
Cuando lance el proyecto, todo estaba oculto, incluso en la barra de tareas, a menos que tenga que mostrarlo.
Extiende tu formulario principal con este:
using System.Windows.Forms;
namespace HideWindows
{
public class HideForm : Form
{
public HideForm()
{
Opacity = 0;
ShowInTaskbar = false;
}
public new void Show()
{
Opacity = 100;
ShowInTaskbar = true;
Show(this);
}
}
}
Por ejemplo:
namespace HideWindows
{
public partial class Form1 : HideForm
{
public Form1()
{
InitializeComponent();
}
}
}
Más información en este artículo (español):
He luchado mucho con este problema y la solución es mucho más simple de lo que pensé. Primero probé todas las sugerencias aquí, pero luego no estaba satisfecho con el resultado y lo investigué un poco más. Encontré que si agrego el:
this.visible=false;
/* to the InitializeComponent() code just before the */
this.Load += new System.EventHandler(this.DebugOnOff_Load);
Está funcionando bien. pero quería una solución más simple y resulta que si agrega el:
this.visible=false;
/* to the start of the load event, you get a
simple perfect working solution :) */
private void
DebugOnOff_Load(object sender, EventArgs e)
{
this.Visible = false;
}
Intenta ocultar la aplicación de la barra de tareas también.
Para hacer eso, usa este código.
protected override void OnLoad(EventArgs e)
{
Visible = false; // Hide form window.
ShowInTaskbar = false; // Remove from taskbar.
Opacity = 0;
base.OnLoad(e);
}
Gracias. Ruhul
Lanzar una aplicación sin un formulario significa que tendrá que administrar el inicio / cierre de la aplicación usted mismo.
Comenzar el formulario de invisible es una mejor opción.
Lo hago así - desde mi punto de vista, la manera más fácil:
establezca ''StartPosition'' en ''Manual'' y agregue esto al diseñador del formulario:
Private Sub InitializeComponent()
.
.
.
Me.Location=New Point(-2000,-2000)
.
.
.
End Sub
Asegúrese de que la ubicación esté configurada en algo más allá o por debajo de las dimensiones de la pantalla. Más tarde, cuando desee mostrar el formulario, establezca la ubicación en algo dentro de las dimensiones de la pantalla.
Me refiero a esto desde C #, pero debería ser muy similar en vb.net.
En su archivo de programa principal, en el método Principal, tendrá algo como:
Application.Run(new MainForm());
Esto crea una nueva forma principal y limita la vida útil de la aplicación a la duración de la forma principal.
Sin embargo, si elimina el parámetro a Application.Run (), la aplicación se iniciará sin mostrar ningún formulario y podrá mostrar y ocultar los formularios tanto como desee.
En lugar de ocultar el formulario en el método Load, inicialice el formulario antes de llamar a Application.Run (). Supongo que el formulario tendrá NotifyIcon para mostrar un ícono en la barra de tareas, esto puede mostrarse incluso si el formulario no está visible. Llamar a Form.Show()
o Form.Hide()
desde los controladores de los eventos de NotifyIcon mostrará y ocultará el formulario, respectivamente.
Por lo general, solo harías esto cuando estés usando un ícono de bandeja o algún otro método para mostrar el formulario más tarde, pero funcionará bien incluso si nunca muestras tu formulario principal.
Cree un bool en su clase de formulario que está predeterminado en falso:
private bool allowshowdisplay = false;
A continuación, anule el método SetVisibleCore
protected override void SetVisibleCore(bool value)
{
base.SetVisibleCore(allowshowdisplay ? value : allowshowdisplay);
}
Porque Application.Run () establece los formularios .Visible = true después de cargar el formulario, esto lo interceptará y lo establecerá en falso. En el caso anterior, siempre lo configurará en falso hasta que lo habilite estableciendo allowshowdisplay en verdadero.
Ahora que evitará que la forma se muestre al inicio, ahora necesita 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;
}
}
Yo uso esto:
private void MainForm_Load(object sender, EventArgs e)
{
if (Settings.Instance.HideAtStartup)
{
BeginInvoke(new MethodInvoker(delegate
{
Hide();
}));
}
}
Obviamente, debes cambiar la condición if con la tuya.
protected override void OnLoad(EventArgs e)
{
Visible = false; // Hide form window.
ShowInTaskbar = false; // Remove from taskbar.
Opacity = 0;
base.OnLoad(e);
}
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
MainUIForm mainUiForm = new MainUIForm();
mainUiForm.Visible = false;
Application.Run();
}