如何在C#中将窗口置于屏幕中心?

时间:2011-01-05 07:46:57

标签: c# winforms screen center

我需要一种方法来居中当前窗口。因此,例如,如果用户按下按钮,我希望窗口在屏幕上居中。我知道你可以使用startposition属性,但除了应用程序第一次启动时,我无法找到使用它的方法。那么如何将表格置于屏幕中心?

13 个答案:

答案 0 :(得分:182)

使用Form.CenterToScreen()方法。

答案 1 :(得分:130)

  1. 使用属性窗口

    选择表格→转到属性窗口→选择“开始位置”→选择您想要的任何地方。

    "

  2. 编程

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

    注意:请勿直接从代码中调用Form.CenterToScreen()。阅读here

答案 2 :(得分:29)

单行:

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

答案 3 :(得分:26)

在Windows窗体中:

this.StartPosition = FormStartPosition.CenterScreen;

在WPF中:

this.WindowStartupLocation = WindowStartupLocation.CenterScreen;

这就是你所要做的......

答案 4 :(得分:15)

如果您想在运行时使用以下代码将窗口居中,请将其复制到您的应用程序中:

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

答案 5 :(得分:8)

在运行时将表单居中

1.设置表格的以下属性:     
- > StartPosition:CenterScreen     
- > WindowState:正常

这将使表格在运行时居中,但如果表格尺寸大于预期,则执行第二步。

2.在InitializeComponent();

之后添加自定义大小
public Form1()
{
    InitializeComponent();
    this.Size = new Size(800, 600);
}

答案 6 :(得分:6)

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

将任何窗口置于中心,您可以获得

的句柄

答案 7 :(得分:3)

使用此:

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

答案 8 :(得分:2)

使用表单的位置属性。将其设置为所需的左上角

需要x =(desktop_width - form_witdh)/ 2

期望y =(desktop_height - from_height)/ 2

答案 9 :(得分:1)

您可以使用Screen.PrimaryScreen.Bounds检索主监视器的大小(或检查Screen对象以检索所有监视器)。使用MyForms.Bounds的用户来确定表单的放置位置。

答案 10 :(得分:1)

可能与问题不完全相关。但也许可以帮助某人。

以上不是我工作的中心屏幕。原因是我要向表单动态添加控件。从技术上讲,居中位置是正确的(基于添加控件之前的表格)。

所以这是我的解决方案。 (应该同时适用于两种情况)

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”,而不仅仅是使用“高度/宽度”。 添加控件后,首选大小将保留表单的值。高度/宽度不会的地方。

希望这对某人有帮助。

欢呼声

答案 11 :(得分:0)

在使用多显示器的情况下,如果您希望将焦点放在正确的显示器/屏幕上,则可以尝试以下操作:

// Save values for future(for example, to center a form on next launch)
int screen_x = Screen.FromControl(Form).WorkingArea.X;
int screen_y = Screen.FromControl(Form).WorkingArea.Y;

// Move it and center using correct screen/monitor
Form.Left = screen_x;
Form.Top = screen_y;
Form.Left += (Screen.FromControl(Form).WorkingArea.Width - Form.Width) / 2;
Form.Top += (Screen.FromControl(Form).WorkingArea.Height - Form.Height) / 2;

答案 12 :(得分:0)

工作样本

private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
    AccountAddForm f = new AccountAddForm();
    f.StartPosition = FormStartPosition.CenterScreen;
    f.Show();            
}