Событие Load - это самый ранний из возможных моментов, чтобы узнать, каким будет «нормальный» размер формы. В этот момент было применено любое масштабирование, вызванное AutoSizeMode, и любые пользовательские переопределения для размеров границ и заголовков. Однако этот размер будет действительным только в том случае, если в конструкторе WindowState не установлено значение Minimized. Вам придется подождать, пока форма хотя бы один раз не отобразится в нормальном состоянии.
Также помните, что размер, который вы получите, будет подделан, если вы запускаете с включенными рамками Aero fat. Vista и Win7 преднамеренно возвращают размер окна, о котором сообщалось бы, если ваша программа работала в более ранних операционных системах. Если это действительно имеет значение, вам придется использовать Editbin.exe, чтобы пометить вашу программу как совместимую с Vista.
Медведь там ловушек, постарайтесь не задавать вопрос. Вы всегда можете изменить расположение или размер окна при получении события Resize.
Если это только для того, чтобы запомнить местоположение и размер формы, вам нужно использовать Настройки. Используйте Project + Properties, вкладку Settings, чтобы добавить их. Вы не можете использовать автоматическую привязку ApplicationSettings, потому что не хотите сохранять расположение и размер формы, когда она свернута или развернута. Сделайте так, чтобы это выглядело так:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
protected override void OnLoad(EventArgs e) {
if (Properties.Settings.Default.Form1Size.Width > 0) { // Valid?
this.Size = Properties.Settings.Default.Form1Size;
this.Location = Properties.Settings.Default.Form1Location;
}
base.OnLoad(e);
}
protected override void OnLocationChanged(EventArgs e) {
if (this.WindowState == FormWindowState.Normal)
Properties.Settings.Default.Form1Location = this.Location;
base.OnLocationChanged(e);
}
protected override void OnResize(EventArgs e) {
if (this.WindowState == FormWindowState.Normal)
Properties.Settings.Default.Form1Size = this.Size;
base.OnResize(e);
}
protected override void OnFormClosed(FormClosedEventArgs e) {
Properties.Settings.Default.Save();
base.OnFormClosed(e);
}
}