ventanas ventana una tag propiedad otra navegacion entre dentro abrir c# winforms

ventana - propiedad tag c#



¿Alguna forma de crear una ventana principal oculta en C#? (12)

Solo quiero una aplicación ac # con una ventana principal oculta que procesará y responderá a los mensajes de la ventana.

Puedo crear un formulario sin mostrarlo, y luego puedo llamar a Application.Run () sin pasar un formulario, pero ¿cómo puedo conectar el formulario creado al bucle de mensajes?

¿Hay otra manera de hacer esto?

Gracias de antemano por cualquier consejo!


¡Excelente! Ese enlace me señaló en la dirección correcta. Esto parece funcionar:

Form f = new Form1(); f.FormBorderStyle = FormBorderStyle.FixedToolWindow; f.ShowInTaskbar = false; f.StartPosition = FormStartPosition.Manual; f.Location = new System.Drawing.Point(-2000, -2000); f.Size = new System.Drawing.Size(1, 1); Application.Run(f);

Para evitar que aparezca en Alt-Tab, necesita que sea una ventana de herramientas. Desafortunadamente, esto evita que se inicie minimizado. ¡Pero establecer la posición de inicio en Manual y colocarlo fuera de la pantalla hace el truco!


¿Por qué no puedes simplemente pasar el formulario cuando llamas a Application.Run ? Dado que es claramente una llamada de bloqueo, ¿en qué evento desea mostrar el formulario? Simplemente llamar a form.Show() debería ser suficiente.



En el proceso de volver a escribir una aplicación VT ++ TaskTray, en C # .NET, encontré que el siguiente método es realmente viable para lograr lo siguiente.

  1. No se mostró ninguna forma inicial al inicio
  2. Ejecución del bucle de mensajes que se puede usar con Invoke / BeginInvoke según sea necesario, ya que IsWindowHandle es verdadero

Los pasos que seguí:

  1. Utilizó un ApplicationContext en Application.Run () en lugar de un formulario. Vea http://www.codeproject.com/Articles/18683/Creating-a-Tasktray-Application para el ejemplo que usé.
  2. Establezca la propiedad ShowInTaskbar del formulario en true dentro del GUI Designer. (Esto parece contraproducente pero funciona)
  3. Reemplace el método OnLoad () en su configuración de Clase de formulario Visible y ShowInTaskbar en falso como se muestra a continuación.

protected override void OnLoad(EventArgs e) { Visible = false; ShowInTaskbar = false; base.OnLoad(e); }


La mejor manera es usar las siguientes 1-2 líneas en el constuctor:

this.WindowState = FormWindowState.Minimized; this.ShowInTaskbar = false; // This is optional

Incluso puede establecer la propiedad Minimizada en la ventana de Propiedad VS.


Puede crear una clase que herede de System.Windows.Forms.NativeWindow (que proporciona la capacidad básica de bucle de mensajes) y hacer referencia a la propiedad Handle en su constructor para crear su manejador y conectarlo al bucle de mensajes. Una vez que llame a Application.Run , podrá procesar sus mensajes.


Resolví el problema así:

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

Este código reside en el archivo Program.cs, y puede ver la llamada al método original de Application.Run comentada. Acabo de crear un objeto de clase principal (mi clase de formulario principal se llama principal) y comienzo el bucle de mensajes de la aplicación sin ningún parámetro. Esto inicia la aplicación, inicializa los componentes del formulario pero no muestra el formulario.

Nota: debe tener algún método para que aparezca su ventana (como el ícono de la bandeja del sistema, las teclas de acceso rápido o el temporizador o cualquier cosa que desee).


Sé que esta es una pregunta antigua, pero se ubica bien en Google, por lo que proporcionaré mi solución de todos modos.

Hago dos cosas:

private void Form_Load(object sender, EventArgs e) { Opacity = 0; } private void Form_Shown(object sender, EventArgs e) { Visible = false; Opacity = 100; }


Usando la respuesta de Kami como inspiración, creé un concepto más completo. Si usa esta solución, nunca muestre la ventana oculta. Si lo hace, el usuario podría cerrarla y luego perderá la capacidad de controlar la salida de la aplicación de manera ordenada. Este enfoque se puede utilizar para administrar un temporizador, NotifyIcon o cualquier otro componente que sea feliz viviendo en una forma invisible.

using System; using System.Windows.Forms; namespace SimpleHiddenWinform { internal class HiddenForm : Form { private Timer _timer; private ApplicationContext _ctx; public HiddenForm(ApplicationContext ctx) { _ctx = ctx; _timer = new Timer() { Interval = 5000, //5 second delay Enabled = true }; _timer.Tick += new EventHandler(_timer_Tick); } void _timer_Tick(object sender, EventArgs e) { //tell the main message loop to quit _ctx.ExitThread(); } } static class Program { [STAThread] static void Main() { var ctx = new ApplicationContext(); var frmHidden = new HiddenForm(ctx); //pass the application context, not the form Application.Run(ctx); } } }



public partial class Form1 : Form { private bool _isApplicationRun; public Form1(bool applicationRun) { InitializeComponent(); _isApplicationRun = applicationRun; } protected override void SetVisibleCore(bool value) { if (_isApplicationRun) { _isApplicationRun = false; base.SetVisibleCore(false); return; } base.SetVisibleCore(value); } } static class Program { [STAThread] static void Main() { Application.Run(new Form1(true)); } }


Form1 f1=new Form1(); f1.WindowState = FormWindowState.Minimized; f1.ShowInTaskbar = false;