Potrzebuję sposobu na wyśrodkowanie bieżącego okna. Na przykład, jeśli użytkownik naciśnie przycisk, chcę, aby okno wyśrodkowało się na ekranie. Wiem, że możesz użyć właściwości startposition, ale nie mogę znaleźć innego sposobu na jej użycie niż podczas pierwszego uruchomienia aplikacji. Jak więc wyśrodkować formularz na ekranie?
132
Odpowiedzi:
Użyj metody Form.CenterToScreen () .
źródło
Korzystanie z okna Właściwości
Wybierz formularz → przejdź do okna właściwości → wybierz „pozycję początkową” → wybierz dowolne miejsce.
Programowo
Form form1 = new Form(); form1.StartPosition = FormStartPosition.CenterScreen; form1.ShowDialog();
Uwaga: nie wywołuj Form.CenterToScreen () bezpośrednio z kodu. Przeczytaj tutaj .
źródło
Pojedyncza linia:
this.Location = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2, (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2);
źródło
Screen screen = Screen.FromControl(this);
tutaj.Screen.FromControl(this)
ale trzymamPrimaryScreen
. (Rozwijam aplikację pod ograniczeniami sprzętowymi) :-)W Windows Forms:
this.StartPosition = FormStartPosition.CenterScreen;
W WPF:
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
To wszystko, co musisz zrobić ...
źródło
Jeśli chcesz wyśrodkować okna podczas działania, użyj poniższego kodu, skopiuj go do swojej aplikacji:
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)}; }
Na koniec wywołaj powyższą metodę, aby działała:
źródło
this.Location = Screen.AllScreens[0].WorkingArea.Location;
go wcześniej, inne odpowiedzi nie działają w przypadku przenoszenia aplikacji podczas korzystania z wielu ekranów.Wyśrodkowanie formularza w środowisku wykonawczym 1.
Ustaw następującą właściwość Form:
-> StartPosition: CenterScreen
-> WindowState: Normal
Spowoduje to wyśrodkowanie formularza w czasie wykonywania, ale jeśli rozmiar formularza jest większy niż oczekiwany, wykonaj drugi krok.
2. Dodaj rozmiar niestandardowy po InitializeComponent ();
public Form1() { InitializeComponent(); this.Size = new Size(800, 600); }
źródło
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; } } }
Centruje każde okno, do którego można dostać klamkę
źródło
Użyj tego:
this.CenterToScreen(); // This will take care of the current form
źródło
Użyj właściwości Location formularza. Ustaw go w żądanym lewym górnym punkcie
pożądane x = (szerokość_pulpitu - form_witdh) / 2
pożądany y = (wysokość_bloku - wysokość_z_) / 2
źródło
Możesz użyć,
Screen.PrimaryScreen.Bounds
aby pobrać rozmiar monitora podstawowego (lub sprawdzićScreen
obiekt, aby pobrać wszystkie monitory). Użyj tych z,MyForms.Bounds
aby dowiedzieć się, gdzie umieścić formularz.źródło
Może nie być całkowicie adekwatne do pytania. Ale może może komuś pomóc.
Środkowy ekran nie działa dla mnie. Powodem było to, że dynamicznie dodawałem kontrolki do formularza. Technicznie rzecz biorąc, kiedy to wyśrodkowane, było poprawne, na podstawie formularza przed dodaniem kontrolek.
Oto moje rozwiązanie. (Powinien działać w obu scenariuszach)
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);
Zauważysz więc, że używam „PreferredSize” zamiast tylko wysokości / szerokości. Preferowany rozmiar będzie przechowywał wartość formularza po dodaniu kontrolek. Gdzie nie ma wysokości / szerokości.
Mam nadzieję, że to komuś pomoże.
Twoje zdrowie
źródło
W przypadku wielu monitorów i jeśli wolisz wyśrodkować na odpowiednim monitorze / ekranie, możesz wypróbować następujące linie:
// 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;
źródło