我需要一种方法来居中当前窗口。因此,例如,如果用户按下按钮,我希望窗口在屏幕上居中。我知道你可以使用startposition属性,但除了应用程序第一次启动时,我无法找到使用它的方法。那么如何将表格置于屏幕中心?
答案 0 :(得分:182)
答案 1 :(得分:130)
使用属性窗口
选择表格→转到属性窗口→选择“开始位置”→选择您想要的任何地方。
编程
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();
}