Necesito una forma de centrar la ventana actual. Entonces, por ejemplo, si un usuario presiona un botón, quiero que la ventana se centre en la pantalla. Sé que puedes usar la propiedad de inicio de la posición, pero no puedo encontrar una manera de usarlo más que cuando la aplicación se inicia por primera vez. Entonces, ¿cómo centrar el formulario en la pantalla?¿Cómo centro una ventana en la pantalla en C#?
Respuesta
Uso Form.CenterToScreen() método.
Wow, ¿me estás tomando el pelo? Todos los demás saltamos a través de los aros tratando de descubrirlo. Esto funcionó perfecto. ¡Gracias! – Sean
@Sean: siempre conozca su biblioteca. Hay una razón por la que llevas todo ese equipaje. ;-) –
En el sistema con dos monitores, el formulario se centrará en uno que actualmente tenga el cursor. Entonces, la forma puede repentinamente saltar a otro monitor. Ver la publicación [aquí] (http://stackoverflow.com/questions/6837463/how-come-centertoscreen-method-centers-the-form-on-the-screen-where-the-cursor-i/6837499#6837499) – Artemix
Puede usar el Screen.PrimaryScreen.Bounds
para recuperar el tamaño del monitor principal (o inspeccionar el objeto Screen
para recuperar todos los monitores). Use aquellos con MyForms.Bounds
para averiguar dónde colocar su formulario.
Utilice la propiedad Ubicación del formulario. Ajuste a la parte superior punto deseado izquierda
deseada x = (desktop_width - form_witdh)/2
deseada y = (desktop_height - from_height)/2
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace centrewindow
{
public partial class Form1 : Form
{
public struct RECT
{
public int Left; // x position of upper-left corner
public int Top; // y position of upper-left corner
public int Right; // x position of lower-right corner
public int Bottom; // y position of lower-right corner
}
[DllImport("user32.dll")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
[DllImport("user32.dll")]
public static extern bool GetWindowRect(HandleRef hwnd, out RECT lpRect);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
CentreWindow(Handle, GetMonitorDimensions());
}
private void CentreWindow(IntPtr handle, Size monitorDimensions)
{
RECT rect;
GetWindowRect(new HandleRef(this, handle), out rect);
var x1Pos = monitorDimensions.Width/2 - (rect.Right - rect.Left)/2;
var x2Pos = rect.Right - rect.Left;
var y1Pos = monitorDimensions.Height/2 - (rect.Bottom - rect.Top)/2;
var y2Pos = rect.Bottom - rect.Top;
SetWindowPos(handle, 0, x1Pos, y1Pos, x2Pos, y2Pos, 0);
}
private Size GetMonitorDimensions()
{
return SystemInformation.PrimaryMonitorSize;
}
}
}
Centros cualquier ventana se puede obtener el identificador de
Una sola línea:
this.Location = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width)/2,
(Screen.PrimaryScreen.WorkingArea.Height - this.Height)/2);
Esto muestra una buena forma de obtener el centro * de * la 'x' o la 'y' manualmente. Necesitaba 'pantalla central', pero solo para la coordenada 'y'. – atconway
¿Por qué Screen.PrimaryScreen? ¿Qué pasa si el formulario está en 'SecondaryScreen'? Debería usar 'Pantalla de pantalla = Pantalla.DesdeControl (esto); 'aquí. – Artemix
Utilizo estas técnicas primitivas simplemente porque funciona en ** .NET Compact Framework 3.5 **, y esto también explica por qué no uso 'Screen.FromControl (this)' pero lo mantengo en 'PrimaryScreen'. (Estoy desarrollando una aplicación bajo restricción de hardware) :-) – Yeo
En Windows Forms:
this.StartPosition = FormStartPosition.CenterScreen;
En WPF:
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
Eso es todo lo que tiene que hacer ...
Perfecto mi amigo. –
La mejor respuesta para la situación. No quería establecer la posición, pero para que se restablezca una vez que regrese al formulario. Esto es perfecto. – KangarooRIOT
Si desea centrar las ventanas durante el tiempo de ejecución de un código a continuación, copiarlo en su aplicación:
protected void ReallyCenterToScreen()
{
Screen screen = Screen.FromControl(this);
Rectangle workingArea = screen.WorkingArea;
this.Location = new Point() {
X = Math.Max(workingArea.X, workingArea.X + (workingArea.Width - this.Width)/2),
Y = Math.Max(workingArea.Y, workingArea.Y + (workingArea.Height - this.Height)/2)};
}
Y finalmente llamamos al método anterior para obtener que trabajo:
ReallyCenterToScreen();
Uso de la propiedad ventana
Seleccione el formulario → vaya a la ventana de propiedades → seleccione "posición inicial" → seleccione el lugar que desee.
programación
formulario Form1 = new Form(); form1.StartPosition = FormStartPosition.CenterScreen; form1.ShowDialog();
Nota: No llame directamente a Form.CenterToScreen() desde su código. Lee here.
Esta debería ser la respuesta aceptada. – user2481095
Centrar una forma en tiempo de ejecución
1.Establecer siguiente propiedad de la Forma:
-> StartPosition: CenterScreen
-> WindowState: Largo
Esto centrará el formulario en tiempo de ejecución, pero si el tamaño de la forma es más grande de lo esperado, lo segundo paso.
2. Agregue el tamaño personalizado después de InitializeComponent();
public Form1()
{
InitializeComponent();
this.Size = new Size(800, 600);
}
Es bueno que mencione WindowState Normal. Gracias. –
Utilice esta:
this.CenterToScreen(); // This will take care of the current form
-100. "** No ** llame a CenterToScreen() directamente desde su código. En su lugar, establezca la propiedad StartPosition en CenterScreen." http://msdn.microsoft.com/en-us/library/system.windows.forms.form.centertoscreen.aspx – A876
- 1. ¿Cómo centro un JDialog en la pantalla?
- 2. Colocación de una ventana en la pantalla
- 3. ¿Cómo centrar una ventana en la pantalla en Tkinter?
- 4. Hacer UIView en el centro de la pantalla
- 5. Cómo dibujar a la pantalla en C++?
- 6. lugar Qt nueva ventana correctamente en pantalla, sobre el centro del ratón, se mueven en la pantalla
- 7. ¿Cómo colocar div en el centro de la pantalla?
- 8. ¿Cómo obtengo el centro de la pantalla en cocos2d?
- 9. centro de la ventana de dicom, ancho de la ventana
- 10. Ventana emergente, Pantalla central
- 11. Pantalla registrar una sola ventana
- 12. Pantalla de píxeles en la pantalla en C
- 13. ¿Cómo pego una imagen en la parte inferior de la pantalla visible y me centro?
- 14. Clase para colocar una ventana en la pantalla
- 15. ¿Cómo centro un UIImageView dentro de una pantalla completa UIScrollView?
- 16. Tomando captura de pantalla de una ventana específica - C++/Qt
- 17. Android Canvas.drawCircle en el centro de la pantalla
- 18. ¿Cómo buscar una imagen en la pantalla en C#?
- 19. ¿Cómo obtener una miniatura de una ventana en C#?
- 20. ¿Cómo mostrar la ventana emergente a pantalla completa en javascript?
- 21. ¿Cómo configuro el tamaño de la ventana/pantalla en xna?
- 22. C#/WPF: ¿Coloca el control emergente en el centro de la pantalla?
- 23. Cómo crear una ventana oculta en C++
- 24. Centro de notificaciones en C++
- 25. La ventana aparece fuera de la pantalla en ubuntu
- 26. ¿Cómo puedo agregar una pantalla de bienvenida en C#?
- 27. ¿Cómo puedo maximizar la ventana de WPF en la pantalla con el cursor del mouse?
- 28. ¿Cómo hacer un widget en el centro de la pantalla en PySide/PyQt?
- 29. ¿Cómo puedo visualizar la imagen en el centro de la pantalla?
- 30. ¿Cómo tomar una captura de pantalla de la ventana activa en Delphi?
supongo que el uso de formas de ganar? –
Sí, eso es correcto – Sean
No use Form.CenterToScreen. Ver [esta publicación] (http://stackoverflow.com/questions/6837463/how-come-centertoscreen-method-centers-the-form-on-the-screen-where-the-cursor-i/6837499#6837499) para detalles. – Artemix