2016-05-29 2 views
1

Gibt es eine Möglichkeit, die tatsächliche Größe eines Formulars zu finden, das sich selbst mit AutoSize=true ändert?Gibt es eine Möglichkeit, die tatsächliche Größe eines Formulars zu finden, dessen Größe sich mit AutoSize = true ändert?

Zum Beispiel habe ich ein Formular, das Controller zur Laufzeit erstellt, und ich möchte, dass einige der Controller an bestimmten Stellen relativ zur Größe des Formulars platziert werden.

Wenn ich versuche, aus dem Formular This.Width oder This.Right oder This.PreferredSize.Width sie Rückgabewerte zu erhalten, die zu groß sind, so vermute ich, auf die Form einige Standardgröße gibt es, dass die AutoSize nicht berührt.

Gibt es eine Möglichkeit, die AutoSize die aktuelle Größe des Formulars zu aktualisieren?

+2

Warten Sie, bis das Load-Ereignis ausgelöst wird. Dies ist einer der wenigen wirklichen Gründe, dieses Ereignis jemals zu verwenden. Das Erzwingen bringt dich überhaupt nicht weiter, du kannst die wahre Größe erst bekommen, wenn das native Fenster erstellt ist. Und stellen Sie sicher, dass Sie die ClientSize-Eigenschaft verwenden, die Sie wenig für Größe verwenden, wenn Sie sich für das Layout interessieren, da es noch nicht vorhersehbar ist. –

+0

@HansPassant by load event meinst du die 'InitializeComponent()'? – shinzou

+0

@kuhaku Nein, er meint das Ereignis 'Load'. –

Antwort

3

Width, Height und Size werden immer die "tatsächliche" Größe Ihres Formulars zurückgeben. Sie können jedoch auf die SizeChanged Ereignis abonnieren von Änderungen, zB benachrichtigt werden:

public Form1() 
{ 
    this.SizeChanged += Form1_SizeChanged; 
    InitializeComponent(); 
} 

private void Form1_SizeChanged(object sender, EventArgs e) 
{ 
    Debug.WriteLine(this.Width + "/" + this.Height); 
} 

Oder, wenn Sie es nur einmal brauchen (nach Auto-Size), können Sie die Load Ereignis stattdessen verwenden können:

public Form1() 
{ 
    this.Load += Form1_Load; 
    InitializeComponent(); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    Debug.WriteLine(this.Width + "/" + this.Height); 
} 

Weitere Informationen:

Order of Events in Windows Forms
Form.Load Event
Control.SizeChanged Event

+0

Es ist nicht genau das, wonach ich gefragt habe, ich fragte, ob nach dem Hinzufügen von Controllern zu bestimmten Orten und während das Formular noch initialisiert wird, um seine Größe von der Autosize zu bekommen. Es hat nichts mit der Größenanpassung des Benutzers zu tun. – shinzou

Verwandte Themen