Я бы рассмотрел возможность использования Control.Dock
вместе с одним из перечислений DockStyle
значения.
Возможно, вам придется поиграть с Layout
a>, чтобы вы могли по-разному располагать элементы управления формы в зависимости от выбранного DockStyle
.
С моей точки зрения, вам нужно будет учитывать Control.Location
, чтобы узнать, к какому значению DockStyle
прикрепить форму.
ИЗМЕНИТЬ №1
Ваша форма Windows имеет свойство Dock
, поскольку оно наследуется от Control
.
Рассмотрим следующее:
Каждый раз, когда ваша форма приближается, например, к правой стороне экрана или к контейнеру MDI, вы хотите закрепить правильно, верно? (Здесь небольшая игра слов... =P) Итак, вы должны подписаться на Control.LocationChanged
.
private void myForm_LocationChanged(object sender, EventArgs e) {
if (this.Location.X > 900) then
this.Dock = DockStyle.Right;
else if (this.Location.X < 150) then
this.Dock = DockStyle.Left;
else if (this.Location.Y > 600) then
this.Dock = DockStyle.Bottom;
else if (this.Location.Y < 150) then
this.Dock = DockStyle.Top;
else
this.Dock = DockStyle.None;
}
Действительно, вместо постоянных значений вы должны использовать текущее разрешение рабочего стола и вычислять соотношение, исходя из которого вы хотите, чтобы ваша стыковка происходила.
***Отказ от ответственности:****Этот код предоставляется как есть и не тестировался. Мы надеемся, что этого алгоритма достаточно, чтобы провести вас через процесс стыковки по мере необходимости. Дополнительная помощь может быть оказана по запросу.* =)
Похоже, что свойство Form.DesktopLocation
более подходящий инструмент для работы, чем для вашего главного окна, то есть, например, для вашего MDI-контейнера. Что касается других окон, я бы согласился с чем-то, похожим на предоставленный пример кода.
Это помогает?
РЕДАКТИРОВАНИЕ №2
Если вы хотите предотвратить перекрытие форм, возможно, Control.BringToFront()
может сделать это до или после вашего вызова Control.Show()
в зависимости от того, что вам больше подходит.
person
Will Marcouiller
schedule
09.07.2010