Причина, по которой свойство Form.Size недоступно в пользовательском интерфейсе привязки параметров, заключается в том, что это свойство помечено DesignerSerializationVisibility.Hidden . Это означает, что разработчик не знает, как его сериализовать, не говоря уже о создании привязки данных для него. Вместо этого свойство Form.ClientSize является тем, которое сериализуется.
Если вы попытаетесь получить ум, связав Местоположение и ClientSize , вы увидите еще одну проблему. Когда вы попытаетесь изменить размер вашей формы с левого или верхнего края, вы увидите странное поведение. По-видимому, это связано с тем, как двусторонняя привязка данных работает в контексте наборов свойств, которые взаимно влияют друг на друга. И Местоположение и ClientSize в конечном итоге вызывают общий метод, SetBoundsCore () .
Кроме того, привязка данных к таким свойствам, как Местоположение и Размер , неэффективна. Каждый раз, когда пользователь перемещает или изменяет размер формы, Windows отправляет в форму сотни сообщений, заставляя логику привязки данных выполнять большую обработку, когда все, что вам действительно нужно, это сохранить последнюю позицию и размер до закрытия формы.
Это очень упрощенная версия того, что я делаю:
private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
Properties.Settings.Default.MyState = this.WindowState;
if (this.WindowState == FormWindowState.Normal)
{
Properties.Settings.Default.MySize = this.Size;
Properties.Settings.Default.MyLoc = this.Location;
}
else
{
Properties.Settings.Default.MySize = this.RestoreBounds.Size;
Properties.Settings.Default.MyLoc = this.RestoreBounds.Location;
}
Properties.Settings.Default.Save();
}
private void MyForm_Load(object sender, EventArgs e)
{
this.Size = Properties.Settings.Default.MySize;
this.Location = Properties.Settings.Default.MyLoc;
this.WindowState = Properties.Settings.Default.MyState;
}
Почему это очень упрощенная версия? Потому что сделать это правильно намного сложнее , чем кажется: -)