web-dev-qa-db-fra.com

Comment centrer une fenêtre à l'écran en C #?

J'ai besoin d'un moyen de centrer la fenêtre actuelle. Ainsi, par exemple, si un utilisateur appuie sur un bouton, je veux que la fenêtre se centre à l’écran. Je sais que vous pouvez utiliser la propriété startposition, mais je ne peux pas trouver un moyen de l'utiliser autrement que lors du premier démarrage de l'application. Alors, comment puis-je centrer le formulaire sur l'écran?

109
Sean

Utilisez Form.CenterToScreen () méthode.

180
dzendras
  1. Utilisation de la fenêtre Propriété

    Sélectionner un formulaire → aller à la fenêtre de propriété → sélectionner "position de départ" → sélectionner l’endroit souhaité.

    "

  2. Par programme

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

    Remarque: N'appelez pas directement Form.CenterToScreen () à partir de votre code. Lire ici .

125
Nayana Adassuriya

Une seule ligne:

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

Dans Windows Forms:

this.StartPosition = FormStartPosition.CenterScreen;

En WPF:

this.WindowStartupLocation = WindowStartupLocation.CenterScreen;

C'est tout ce que vous avez à faire ...

26
Saimon

Si vous souhaitez centrer vos fenêtres pendant l'exécution, utilisez le code ci-dessous, copiez-le dans votre application:

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

Et enfin, appelez la méthode ci-dessus pour le faire fonctionner:

ReallyCenterToScreen();
15
Sarsur.A

Centrer un formulaire au moment de l'exécution

1.Définir la propriété suivante de Form:
-> StartPosition: CenterScreen
-> WindowState: Normal

Cela centrera le formulaire au moment de l'exécution, mais si la taille du formulaire est plus grande que prévu, effectuez la deuxième étape.

2. Ajouter une taille personnalisée après InitializeComponent ();

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

Centre toute fenêtre que vous pouvez obtenir la poignée de

6
Rob

Utilisez ceci:

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

Utilisez la propriété Location du formulaire. Réglez-le sur le point en haut à gauche souhaité

x souhaité (desktop_width - form_witdh)/2

désiré y = (desktop_height - from_height)/2

2
Sarwar Erfan

Vous pouvez utiliser le Screen.PrimaryScreen.Bounds pour récupérer la taille du moniteur principal (ou inspecter l'objet Screen pour récupérer tous les moniteurs). Utilisez ceux avec MyForms.Bounds pour déterminer où placer votre formulaire.

1
C.Evenhuis

Pourrait ne pas être complètement pertinent à la question. Mais peut-être peut aider quelqu'un. 

Écran central non de ce qui précède fonctionne pour moi. La raison était que j'ajoutais des contrôles de manière dynamique au formulaire. Techniquement, le centrage était correct, en fonction du formulaire avant l'ajout des contrôles. 

Alors voici ma solution. (Devrait fonctionner avec les deux scénarios) 

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

Donc, vous remarquerez que j'utilise "PreferredSize" au lieu d'utiliser uniquement Height/Width. La taille préférée contiendra la valeur du formulaire après l’ajout des contrôles. Où hauteur/largeur ne sera pas. 

J'espère que ça aide quelqu'un. 

À votre santé 

0
De Wet Ellis

En cas de multi-moniteur et si vous préférez vous centrer sur le moniteur/écran correct, vous pouvez essayer ces lignes:

// 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