it-swarm.com.de

Wie zentriere ich ein Fenster in C #?

Ich brauche eine Möglichkeit, das aktuelle Fenster zu zentrieren. Wenn ein Benutzer beispielsweise eine Taste drückt, möchte ich, dass sich das Fenster auf dem Bildschirm zentriert. Ich weiß, dass Sie die startposition -Eigenschaft verwenden können, aber ich kann nicht herausfinden, wie dies anders als beim Start der Anwendung verwendet werden kann. Wie zentriere ich das Formular auf dem Bildschirm?

109
Sean

Verwenden Sie die Methode Form.CenterToScreen () .

180
dzendras
  1. Verwenden des Fensters Property

    Formular auswählen → zum Eigenschaftenfenster gehen → "Startposition" auswählen → den gewünschten Ort auswählen.

    "

  2. Programmatisch

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

    Hinweis: Rufen Sie Form.CenterToScreen () nicht direkt aus Ihrem Code auf. Lesen Sie hier .

138

Eine einzelne Zeile:

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

In Windows Forms:

this.StartPosition = FormStartPosition.CenterScreen;

In WPF:

this.WindowStartupLocation = WindowStartupLocation.CenterScreen;

Das ist alles was Sie tun müssen ...

26
Saimon

Wenn Sie Ihre Fenster zur Laufzeit zentrieren möchten, verwenden Sie den folgenden Code, und kopieren Sie ihn in Ihre Anwendung:

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

Rufen Sie schließlich die Methode oben auf, um sie zum Laufen zu bringen:

ReallyCenterToScreen();
15
Sarsur.A

Ein Formular in Runtime zentrieren

1. Legen Sie folgende Eigenschaft von Form fest:
-> StartPosition: CenterScreen
-> WindowState: Normal

Dadurch wird das Formular zur Laufzeit zentriert. Wenn jedoch die Formulargröße größer ist als erwartet, führen Sie den zweiten Schritt aus.

2. Benutzerdefinierte Größe nach InitializeComponent () hinzufügen;

public Form1()
{
    InitializeComponent();
    this.Size = new Size(800, 600);
}
8
Faiz Siddiqui
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;
        }
    }
}

Zentriert jedes Fenster, das Sie in den Griff bekommen können

6
Rob

Benutze das:

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

Verwenden Sie die Location-Eigenschaft des Formulars. Stellen Sie den gewünschten oberen linken Punkt ein

gewünschtes x = (desktop_width - form_witdh)/2

gewünschtes y = (desktop_height - from_height)/2

2
Sarwar Erfan

Sie können den Screen.PrimaryScreen.Bounds verwenden, um die Größe des primären Monitors abzurufen (oder das Screen-Objekt überprüfen, um alle Monitore abzurufen). Verwenden Sie diejenigen mit MyForms.Bounds, um herauszufinden, wo Sie Ihr Formular platzieren möchten.

1
C.Evenhuis

Möglicherweise nicht vollständig relevant für die Frage. Aber vielleicht kann jemandem helfen. 

Center-Bildschirm keine der oben genannten Arbeiten für mich. Grund dafür war, dass ich dem Formular dynamisch Steuerelemente hinzufügte. Technisch war es korrekt zentriert, basierend auf dem Formular vor dem Hinzufügen der Steuerelemente. 

Also hier war meine Lösung. (Sollte mit beiden Szenarien funktionieren) 

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

Sie werden also feststellen, dass ich "PreferredSize" verwende, anstatt nur Höhe/Breite zu verwenden. .__ Die bevorzugte Größe enthält den Wert des Formulars, nachdem die Steuerelemente hinzugefügt wurden. Wo Höhe/Breite nicht. 

Hoffe das hilft jemandem. 

Prost 

0
De Wet Ellis

Im Falle eines Multi-Monitors und Wenn Sie es bevorzugen, den richtigen Monitor/Bildschirm zu zentrieren, versuchen Sie vielleicht folgende Zeilen:

// 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;
0
V.7