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

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

109 голосов | спросил Sean 5 Jam1000000amWed, 05 Jan 2011 10:46:57 +030011 2011, 10:46:57

11 ответов


0

Используйте метод Form.CenterToScreen () .

ответил dzendras 5 Jam1000000amWed, 05 Jan 2011 11:13:20 +030011 2011, 11:13:20
0
  1. Использование окна Свойство

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

    "

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

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

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

ответил Nayana Adassuriya 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 11 Sep 2013 07:34:03 +0400 2013, 07:34:03
0

Одна строка:

this.Location = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2,
                          (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2);
ответил harveyt 10 +04002012-10-10T20:18:16+04:00312012bEurope/MoscowWed, 10 Oct 2012 20:18:16 +0400 2012, 20:18:16
0

В Windows Forms:

this.StartPosition = FormStartPosition.CenterScreen;

В WPF:

this.WindowStartupLocation = WindowStartupLocation.CenterScreen;

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

ответил Saimon 11 PMpThu, 11 Apr 2013 16:24:18 +040024Thursday 2013, 16:24:18
0

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

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();
ответил Sarsur.A 28 PM000000110000001031 2013, 23:11:10
0

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

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

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

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

public Form1()
{
    InitializeComponent();
    this.Size = new Size(800, 600);
}
ответил Faiz Siddiqui 17 J000000Thursday14 2014, 17:09:03
0
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;
        }
    }
}

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

ответил Rob 5 Jam1000000amWed, 05 Jan 2011 11:14:54 +030011 2011, 11:14:54
0

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

this.CenterToScreen();  // This will take care of the current form
ответил UJS 21 J000000Friday17 2017, 08:05:46
0

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

требуемый x = (desktop_width - form_witdh) /2

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

ответил Sarwar Erfan 5 Jam1000000amWed, 05 Jan 2011 10:59:03 +030011 2011, 10:59:03
0

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

ответил C.Evenhuis 5 Jam1000000amWed, 05 Jan 2011 10:57:04 +030011 2011, 10:57:04
0

Может быть, не совсем относится к вопросу. Но, возможно, может помочь кому-то.

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

Итак, вот мое решение. (Должно работать с обоими сценариями)

int x = Screen.PrimaryScreen.Bounds.Width - this.PreferredSize.Width;
int y = Screen.PrimaryScreen.Bounds.Height - this.PreferredSize.Height;

this.Location = new Point(x / 2, y / 2);

Итак, вы заметите, что я использую «PreferredSize» вместо того, чтобы просто использовать Высота /Ширина. Предпочтительный размер будет содержать значение формы после добавления элементов управления. Где Высота /Ширина не будет.

Надеюсь, это кому-нибудь поможет.

Приветствия

ответил De Wet Ellis 13 22018vEurope/Moscow11bEurope/MoscowTue, 13 Nov 2018 02:28:58 +0300 2018, 02:28:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132