현재 창을 가운데에 맞추는 방법이 필요합니다. 예를 들어 사용자가 버튼을 누르면 창을 화면 중앙에 놓기를 원합니다. startposition 속성을 사용할 수 있다는 것을 알고 있지만 응용 프로그램을 처음 시작할 때 이외의 다른 방법을 사용할 수는 없습니다. 그러면 양식을 화면 중앙에 어떻게 배치합니까?
현재 창을 가운데에 맞추는 방법이 필요합니다. 예를 들어 사용자가 버튼을 누르면 창을 화면 중앙에 놓기를 원합니다. startposition 속성을 사용할 수 있다는 것을 알고 있지만 응용 프로그램을 처음 시작할 때 이외의 다른 방법을 사용할 수는 없습니다. 그러면 양식을 화면 중앙에 어떻게 배치합니까?
답변:
Form.CenterToScreen () 메서드를 사용하십시오 .
한 줄 :
this.Location = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2,
(Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2);
Screen screen = Screen.FromControl(this);
여기서 사용해야 합니다.
Screen.FromControl(this)
유지 해야하는지 설명 합니다 PrimaryScreen
. (하드웨어 제약 조건에서 응용 프로그램을 개발 중입니다) :-)
Windows Forms에서 :
this.StartPosition = FormStartPosition.CenterScreen;
WPF에서 :
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
그게 당신이해야 할 전부입니다 ...
런타임 중에 창을 가운데에 맞추려면 아래 코드를 사용하여 응용 프로그램에 복사하십시오.
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();
this.Location = Screen.AllScreens[0].WorkingArea.Location;
이전에 실행하더라도 작동하므로 여러 화면을 사용할 때 앱을 이동하는 경우 다른 답변이 작동하지 않기 때문에 가장 효과적입니다.
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;
}
}
}
핸들을 얻을 수있는 모든 창 중앙
이것을 사용하십시오 :
this.CenterToScreen(); // This will take care of the current form
폼의 위치 속성을 사용하십시오. 원하는 왼쪽 상단 지점으로 설정
원하는 x = (데스크톱 너비-form_witdh) / 2
원하는 y = (데스크탑 높이-출발 높이) / 2
질문과 완전히 관련이 없을 수도 있습니다. 그러나 누군가를 도울 수 있습니다.
위의 작업이 아닌 가운데 화면이 나를 위해 작동합니다. 이유는 폼에 컨트롤을 동적으로 추가했기 때문입니다. 기술적으로 중앙에 위치했을 때 컨트롤을 추가하기 전에 양식에 따라 정확했습니다.
그래서 여기 내 해결책이있었습니다. (두 시나리오 모두에서 작동해야 함)
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"를 사용하고 있음을 알 수 있습니다. 기본 크기는 컨트롤을 추가 한 후 폼의 값을 유지합니다. 높이 / 너비가 아닌 곳.
이것이 누군가를 돕기를 바랍니다.
건배
다중 모니터의 경우 올바른 모니터 / 화면을 중앙에 배치하려면 다음 라인을 시도하십시오.
// 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;