C # MDI Child Form - размер до половины рабочей области

Мы используем MDI для нашей программы.

Да, я знаю, используйте что-нибудь еще, MDI плохой и т.д. и т.д. клиенту удобнее использовать стиль интерфейса MDI, поэтому мы его придерживаемся. В любом случае, пока мы не обнаружили необходимости ни в чем подобном TDI или SDI.

Единственное, что мы хотели бы сделать, - это автоматически изменять размер дочернего элемента MDI так, чтобы он составлял половину размера клиентской области MDI; Это похоже на то, как в Windows 7/8 вы можете перетащить окно на одну сторону экрана, и оно изменит его размер, чтобы заполнить половину рабочего стола.

Как я могу это сделать?

Чтобы уточнить, я не ищу стыковку, и, очевидно, изменить размер формы достаточно просто, меня больше интересует, как поймать, когда пользователь перетаскивает форму к краю клиентской области MDI, и каким-то образом централизовать эту логику, чтобы Я не повторяю это во всех формах. Также было бы приятно показать схему того, где окажется форма (опять же, аналогично изменению размера Win7 / 8).

Спасибо


person Jez Clark    schedule 01.04.2014    source источник


Ответы (1)


Тебя ждет мир боли.

Но вот как начать:

Form f = new Form();
f.ResizeEnd += f_ResizeEnd;
f.MdiParent = this;
f.Show();

void f_ResizeEnd(object sender, EventArgs e) {
  MdiClient mc = this.Controls.OfType<MdiClient>().First();
  Form f = sender as Form;
  if (f.Right >= mc.ClientSize.Width) {
    f.SetBounds(mc.ClientSize.Width / 2, 0,
                mc.ClientSize.Width / 2, mc.ClientSize.Height);
  }
}
person LarsTech    schedule 01.04.2014
comment
Спасибо. Я поддержал это, хотя в конце концов я решил просто добавить несколько кнопок на панели инструментов, чтобы выполнять эту работу, а не улавливать события движения / изменения размера; в ретроспективе это кажется более логичным. - person Jez Clark; 02.04.2014