[C#] C #에서 창을 가운데에 맞추려면 어떻게합니까?

현재 창을 가운데에 맞추는 방법이 필요합니다. 예를 들어 사용자가 버튼을 누르면 창을 화면 중앙에 놓기를 원합니다. startposition 속성을 사용할 수 있다는 것을 알고 있지만 응용 프로그램을 처음 시작할 때 이외의 다른 방법을 사용할 수는 없습니다. 그러면 양식을 화면 중앙에 어떻게 배치합니까?



답변

Form.CenterToScreen () 메서드를 사용하십시오 .


답변

  1. 은 Using 속성 창을

    양식 선택 → 속성 창으로 이동 → “시작 위치”선택 → 원하는 곳을 선택하십시오.

    "

  2. 프로그래밍 방식으로

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

    참고 : 코드에서 Form.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;

그게 당신이해야 할 전부입니다 …


답변

런타임 중에 창을 가운데에 맞추려면 아래 코드를 사용하여 응용 프로그램에 복사하십시오.

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 : Normal

런타임에 양식을 중앙에 배치하지만 양식 크기가 예상보다 크면 두 번째 단계를 수행하십시오.

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

핸들을 얻을 수있는 모든 창 중앙