Ich brauche eine Möglichkeit, das aktuelle Fenster zu zentrieren. Wenn beispielsweise ein Benutzer eine Schaltfläche 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 Sie diese verwenden können, außer wenn die Anwendung zum ersten Mal gestartet wird. Wie zentriere ich das Formular auf dem Bildschirm?Wie zentriere ich ein Fenster auf dem Bildschirm in C#?
Antwort
Verwendung Form.CenterToScreen() Methode.
Wow, verarschen Sie mich? Der Rest von uns springt durch die Reifen, um es herauszufinden. Das hat perfekt funktioniert. Vielen Dank! – Sean
@Sean: Immer Ihre Bibliothek kennen. Es gibt einen Grund, warum du all dieses Gepäck trägst. ;-) –
Bei einem System mit zwei Monitoren ist das Formular auf einem zentriert, auf dem sich der Cursor gerade befindet. So kann das Formular plötzlich auf einen anderen Monitor springen. Siehe den Beitrag [hier] (http://stackoverflow.com/questions/6837463/how-come-centertoscreen-method-centers-the-form-on-the-screen-where-the-cursori-i/6837499#6837499). – Artemix
Sie können die Screen.PrimaryScreen.Bounds
verwenden, um die Größe des primären Monitors abzurufen (oder das Objekt Screen
untersuchen, um alle Monitore abzurufen). Verwenden Sie diese mit MyForms.Bounds
um herauszufinden, wo Sie Ihr Formular platzieren.
Verwenden Sie die Standorteigenschaft des Formulars. Eingestellt auf den gewünschten Punkt oben links
gewünschten x = (desktop_width - form_witdh)/2
gewünschten y = (desktop_height - from_height)/2
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;
}
}
}
Zentren jedes Fenster können Sie den Griff
Eine einzelne Zeile erhalten:
this.Location = new Point((Screen.PrimaryScreen.WorkingArea.Width - this.Width)/2,
(Screen.PrimaryScreen.WorkingArea.Height - this.Height)/2);
Dies zeigt eine gute Möglichkeit, das Zentrum von * entweder * dem 'x' oder 'y' manuell zu erhalten. Ich brauchte 'Center Screen', aber nur für die 'Y' Koordinate. – atconway
Warum Screen.PrimaryScreen? Was passiert, wenn das Formular auf "SecondaryScreen" steht? Sie sollten 'Screen screen = Screen.FromControl (this);' hier verwenden. – Artemix
Ich benutze diese primitiven Techniken einfach, weil es auf dem .NET Compact Framework 3.5 ** funktioniert, und dies erklärt auch, warum ich 'Screen.FromControl (this)' nicht verwende, sondern es auf 'PrimaryScreen' behalte. (Ich entwickle eine Anwendung unter Hardware-Constraint) :-) – Yeo
In Windows Forms:
this.StartPosition = FormStartPosition.CenterScreen;
In WPF:
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
Das ist alles, was Sie tun müssen ...
Vervollkommnen Sie meinen Freund. –
Beste Antwort für die Situation. Ich wollte die Position nicht festlegen, sondern zurücksetzen lassen, sobald ich zum Formular zurückgekehrt bin. Dies ist perfekt. – KangarooRIOT
Wenn Sie während Ihrer Windows-zentrieren möchten Runtime den Code unten verwenden, kopieren Sie sie 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)};
}
Und schließlich die Methode aufrufen, oben zu bekommen sie arbeiten:
ReallyCenterToScreen();
Mit dem Property Fenster
Formular auswählen → zum Eigenschaftsfenster gehen → "Startposition" auswählen → den gewünschten Ort auswählen.
Programmatically
Formular form1 = new Formular(); form1.StartPosition = FormStartPosition.CenterScreen; form1.ShowDialog();
Hinweis: Rufen Sie Form.CenterToScreen() nicht direkt von Ihrem Code ab. Lesen Sie here.
Dies sollte die akzeptierte Antwort sein. – user2481095
Zentrieren eine Laufzeit-Form in
1.Stellen Sie folgende Eigenschaft von Form:
-> Startposition: Mittenschirm
-> Window: Normal
Dies wird die Form zur Laufzeit Zentrieren aber wenn Formulargröße ist größer als erwartet, tut zweiten Schritt.
2. Benutzerdefinierte Größe hinzufügen nach InitializeComponent();
public Form1()
{
InitializeComponent();
this.Size = new Size(800, 600);
}
Es ist nett, dass du WindowState Normal erwähnt hast. Vielen Dank. –
verwenden:
this.CenterToScreen(); // This will take care of the current form
-100. "Rufen Sie nicht CenterToScreen() direkt aus Ihrem Code auf. Stattdessen legen Sie die Eigenschaft StartPosition auf CenterScreen fest." http://msdn.microsoft.com/en-us/library/system.windows.forms.form.centertoscreen.aspx – A876
- 1. Wie zentriere ich einen JDialog auf dem Bildschirm?
- 2. Wie zentriere ich ein modales Fenster auf einer Seite?
- 3. Wie zentriert man ein Fenster auf dem Bildschirm in Tkinter?
- 4. Wie zentriere ich ein Sprite?
- 5. Anzeige Pixel auf dem Bildschirm in C
- 6. Wie kann ich ein WPF-Fenster mit dem Mauszeiger auf dem Bildschirm maximieren?
- 7. Klasse, um ein Fenster auf dem Bildschirm zu positionieren
- 8. So reparieren Sie ein Popup-Fenster auf dem Bildschirm
- 9. Wie zentriere ich ein LinearLayout in RelativeLayout?
- 10. Wie zentriere ich ein Label auf einem Bild in iOS?
- 11. Wie kann ich eine Liste aller momentan auf dem Bildschirm angezeigten Fenster in swift bekommen?
- 12. Suchen Elementposition auf dem Bildschirm
- 13. Wie zentriere ich ein absolut positioniertes Element?
- 14. Erstellen neuer Fenster, die Programme auf dem Bildschirm
- 15. Ionic: Wie zentriere ich ein div?
- 16. Wie zentriere ich ein Div vertikal?
- 17. Xamarin.Forms - Wie zentriere ich ein Element absolut auf der Seite?
- 18. Wie zentriere ich ein Hintergrundbild auf sein Elternelement?
- 19. Wie bekomme ich die Mausposition auf dem Bildschirm in Qt?
- 20. Wie erstelle ich ein Fenster, von dem andere Fenster erben?
- 21. Bildschirm neuzeichnen nach dem Zeichnen auf Bildschirm DC C++
- 22. Aktualisieren ein Intervallvariable auf dem Bildschirm in dem HTML-
- 23. HTA-Anwendung: Fenster unten rechts auf dem Bildschirm platzieren
- 24. Wie setze ich wxPython Mainframe unten rechts auf dem Bildschirm?
- 25. Wie öffne ich ein hardwarebeschleunigtes DirectX-Fenster auf einem zweiten Bildschirm?
- 26. Mausklick auf Fenster statt auf Bildschirm simulieren
- 27. Love2d bewegt ein Objekt auf dem Bildschirm
- 28. Wie zentriere ich automatisch ein Div in IE8 in quirksmode?
- 29. Wie bekomme ich die Mausposition auf dem Bildschirm in WPF?
- 30. Wie zentriere ich einen iframe?
Ich nehme an, Sie gewinnen Formularen? –
Ja, das ist richtig – Sean
Verwenden Sie nicht Form.CenterToScreen. Siehe [diesen Beitrag] (http://stackoverflow.com/questions/6837463/how-come-centertoscreen-method-centers-the-form-on-the-screen-where-the-cursori-i/6837499#6837499) für Details. – Artemix