Как центрировать окно на экране в C#?
Мне нужен способ центрировать текущее окно. Так, например, если пользователь нажимает кнопку, Я хочу, чтобы окно центрировалось на экране. Я знаю, что вы можете использовать свойство startposition, но я не могу найти способ использовать его, кроме как при первом запуске приложения. Итак, как мне центрировать форму на экране?
10 ответов:
использовать форма.CenterToScreen() метод.
С помощью свойства окно
выберите форму → перейдите в окно свойств → выберите "начальная позиция" → выберите любое место, которое вы хотите.
программно
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; } } }
центрирует любое окно, которое вы можете получить дескриптор