Как центрировать окно на экране в C#?


Мне нужен способ центрировать текущее окно. Так, например, если пользователь нажимает кнопку, Я хочу, чтобы окно центрировалось на экране. Я знаю, что вы можете использовать свойство startposition, но я не могу найти способ использовать его, кроме как при первом запуске приложения. Итак, как мне центрировать форму на экране?

10 100

10 ответов:

использовать форма.CenterToScreen() метод.

  1. С помощью свойства окно

    выберите форму → перейдите в окно свойств → выберите "начальная позиция" → выберите любое место, которое вы хотите.

    "

  2. программно

    Form form1 = new Form(); form1.StartPosition = FormStartPosition.CenterScreen; form1.ShowDialog();

    Примечание: не вызывайте напрямую форму.CenterToScreen() из вашего кода. Читайте здесь.

одну строку:

this.Location = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2,
                          (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2);

В Windows Forms:

this.StartPosition = FormStartPosition.CenterScreen;

в WPF:

this.WindowStartupLocation = WindowStartupLocation.CenterScreen;

Это все, что вам нужно сделать...

Если вы хотите центрировать windows во время выполнения используйте приведенный ниже код, скопируйте его в приложение:

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)};
}

и, наконец, вызовите метод выше, чтобы заставить его работать:

ReallyCenterToScreen();

центрирование формы во время выполнения

1.Установите следующее свойство формы:
-> StartPosition : CenterScreen
-> WindowState: Нормальный

это будет центр формы во время выполнения, но если размер формы больше, чем ожидалось, сделайте второй шаг.

2. Добавить пользовательский размер после InitializeComponent ();

public Form1()
{
    InitializeComponent();
    this.Size = new Size(800, 600);
}
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;
        }
    }
}

центрирует любое окно, которое вы можете получить дескриптор

использовать свойство Location формы. Установите его в нужную верхнюю левую точку

желаемый x = (desktop_width-form_witdh) / 2

желаемый y = (desktop_height-from_height)/2

используйте этот:

this.CenterToScreen();  // This will take care of the current form

можно использовать Screen.PrimaryScreen.Bounds чтобы получить размер основного монитора (или проверить Screen объект для извлечения всех мониторов). Используйте их с MyForms.Bounds чтобы выяснить, где разместить форму.