C# - Fenster Positionierung
Verwendung von Windows Forms-ich wollte die position des Fensters in bestimmten coords. Ich dachte, es getan werden kann in einer einfachen Weise, aber der folgende code funktioniert gar nicht:
public Form1()
{
InitializeComponent();
this.Top = 0;
this.Left = 0;
}
Jedoch, wenn nur ein handle für das Fenster, es funktioniert gut:
public Form1()
{
InitializeComponent();
IntPtr hwnd = this.Handle;
this.Top = 0;
this.Left = 0;
}
Können Sie sehen, dass ich nicht arbeiten mit, die Zeiger auf alle. Ich fand Sie auf MSDN folgende Anweisung:
Den Wert der Handle-Eigenschaft ist ein Fenster HWND. Wenn der Griff hat
noch nicht erstellt wurden, verweisen auf diese Eigenschaft zu zwingen, den Griff
erstellt werden.
Bedeutet es, dass wir Fenster-position erst NACH der Erstellung der Griff? Sind setter "Oben/Links" mit diesem Griff intern? Danke für die Klarstellung.
OnHandleCreated
Methode zu vermeiden, wird der Anruf zu this.Handle
. Ich Stimme zu, es ist seltsam, dass this.Handle
offenbar prüft und erstellt die zugrunde liegenden Griff, während andere Eigenschaften, die abhängig von der zugrunde liegenden Griff nicht.haben Sie versucht, setzen Sie Sie in den designer?
Ich weiß, ich kann Problemumgehung es viele Möglichkeiten. Ich wollte nur wissen, warum es auf diese Weise verhält, weil in anderen frameworks (Qt, wxWidgets, MFC,...) können Sie Ihre Fenster-position, direkt in die Fenster der Gebäude.
InformationsquelleAutor Fremen | 2012-04-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel eine WinForm ist positioniert auf dem Bildschirm nach der StartupPosition-Eigenschaft.
Dies bedeutet, dass nach beenden des Form1-Konstruktor der Fenster-Manager erstellen Sie das Fenster, und positionieren Sie es entsprechend, dass das Eigentum.
Wenn Sie StartupPosition = Handbuch dann die Werte Left und Top (Lage) festgelegt, über die designer werden beachtet.
Siehe MSDN für die StartupPosition und auch für die FormStartPosition enum.
Natürlich entfernen müssen, verwenden Sie
this.Handle
.(Ich nehme an, verweisen auf die Eigenschaft, die Sie zwingen, den windows-manager, um zu bauen sofort das Formular mit dem designer Werte in StartupPosition)
InformationsquelleAutor Steve
Oder:
InformationsquelleAutor ispiro
Nicht sehr sicher über den Grund, aber wenn Sie hinzufügen, die Positionierung code auf dem Form_Load-Ereignis, das es funktionieren wird, wie erwartet, ohne zu müssen explizit initialisiert hf.
InformationsquelleAutor Carlos Quintanilla
Sie können den Speicherort auf dem Formular-load-Ereignis wie diesem. dies ist automatisch Griff Form position.
InformationsquelleAutor Sunil Acharya