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?
Utilisez Form.CenterToScreen () méthode.
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é.
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 .
Une seule ligne:
this.Location = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2,
(Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2);
Dans Windows Forms:
this.StartPosition = FormStartPosition.CenterScreen;
En WPF:
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
C'est tout ce que vous avez à faire ...
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();
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);
}
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
Utilisez ceci:
this.CenterToScreen(); // This will take care of the current form
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
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.
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é
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;