2010-09-04 6 views
5

Quiero mostrar un WinForm en la esquina inferior derecha muy por encima de la bandeja del sistema,Mostrar una WinForm sobre el área de notificación

¿Cómo se hace eso? Aquí está mi código:

public static void Notify() 
{   
    Rectangle workingArea = Screen.PrimaryScreen.WorkingArea; 
    Form fm = new Form(); 
    fm.ClientSize = new Size(200, 200); 
    int left = workingArea.Width - fm.Width; 
    int top = workingArea.Height - fm.Height; 
    fm.Location = new Point(left, top); 
    fm.ShowInTaskbar = false; 
    fm.ShowIcon = false; 
    fm.MinimizeBox = false; 
    fm.MaximizeBox = false; 
    fm.FormBorderStyle = FormBorderStyle.FixedToolWindow; 
    fm.Text = "Test"; 
    fm.TopMost = true; 
    fm.Show(); 
} 

Respuesta

8

simplemente he intentado esto y funcionó para mí (nota: este código debe aparecer después de el formulario se ha mostrado por primera vez - por ejemplo, se puede poner en Load manejador de eventos del formulario, o simplemente incluirlo después de cualquier llamada a Show):

Rectangle workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea; 
int left = workingArea.Width - this.Width; 
int top = workingArea.Height - this.Height; 

this.Location = new Point(left, top); 

Ya sea para usar WorkingArea o Bounds depende de lo que quiere decir con "sobre": si quiere decir "al frente", entonces use Bounds, ya que incluye el área que cubre toda la pantalla (incluido el espacio ocupado por la bandeja del sistema); si quiere decir "arriba", entonces use WorkingArea, que solo incluye el escritorio del usuario.

También déjenme aclarar que quieren que se muestre su formulario allí, ¿no? Si quería un ícono en el área de notificación, para eso está el componente NotifyIcon.

+0

Gracias, acabo de actualizar mi código, ¡y no funciona! –

+0

@ Base de datos: Mueva las líneas que establecen la ubicación del formulario a * después * de que llame a 'Mostrar'. Windows Forms hace una cosa extraña donde parece ignorarlo cuando configura la propiedad 'Location' antes de que el formulario se haya mostrado por primera vez. –

+2

Acabo de usar fm.StartPosition = FormStartPosition.Manual; código de Hans Passant y funcionó :-) –

4

Si quería situar el formulario sobre/en frente de la barra de tareas:

Establecer las formas de propiedad TopMost a verdad. Puede usar Screen.PrimaryScreen.Bounds para obtener la resolución de la pantalla y luego establecer la posición de sus formularios de manera apropiada.


Si lo que desea es situar el formulario justo por encima de la barra de tareas en la parte inferior derecha, puede hacerlo de la siguiente manera:

En el diseñador de formularios, Goto Properties-> Eventos y añadir el evento Load para su formulario.

agregar lo siguiente:

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.StartPosition = FormStartPosition.Manual; 
    int x = Screen.PrimaryScreen.WorkingArea.Width - this.Width; 
    int y = Screen.PrimaryScreen.WorkingArea.Height - this.Height; 
    this.Bounds = new Rectangle(x, y, this.Width, this.Height); 
} 
+0

I * think * el OP significaba "sobre" como en "arriba", en lugar de "encima"; así que 'TopMost' no sería apropiado. Sin embargo, podría estar equivocado. –

+0

Es cierto que ... bueno, ahora tiene opciones :) – hydrogen

+0

Gracias, arreglé mi pregunta :-) –

5

Se le olvidó éste:

 fm.StartPosition = FormStartPosition.Manual; 

Lo que usted tiene que trabajar a continuación se pone en la barra de tareas, por ejemplo, el lado izquierdo de la pantalla y ejecutar el código en una máquina que tiene el video Configuración de DPI en un valor diferente (como 125). Solo puede colocar el formulario de forma precisa en su evento de carga. No establezca el tamaño del cliente.

Cuestiones relacionadas