Родительский элемент управления MDI по умолчанию имеет большую область «рабочего стола», которая может отображать несколько дочерних форм. Пользователи могут перетаскивать формы к краю этой области рабочего стола, чтобы большая часть дочерней формы находилась за пределами экрана. (Затем в родительском элементе MDI появляется полоса прокрутки) Мне не нравится эта функция. Есть ли способ заблокировать край области рабочего стола, чтобы дочерние формы оставались полностью видимыми?
Граница области рабочего стола Winforms MDI
Ответы (3)
- Отключить полосы прокрутки окна MDI
- Перехватить событие OnMove всех дочерних окон. Если окно перемещается за границу, «выталкивайте» его обратно по осям x и y, пока оно не окажется внутри родителя.
person
Dave Swersky
schedule
02.03.2009
Код, который я использовал для реализации выбранного выше ответа:
Public alreadyMoved As Boolean = False
Public Const HEIGHT_OF_MENU_STATUS_BARS As Integer = 50
Public Const WIDTH_OF_MENU_STATUS_BARS As Integer = 141
Private Sub Form_Move(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Move
If Not alreadyMoved Then
alreadyMoved = True
'If I'm over the right boundry, drop back to right against that edge
If Me.Location.X + Me.Width > _
MdiParent.ClientRectangle.Width - WIDTH_OF_MENU_STATUS_BARS Then
MyBase.Location = New System.Drawing.Point( _
(MdiParent.ClientRectangle.Width - Me.Width - _
WIDTH_OF_MENU_STATUS_BARS), MyBase.Location.Y)
End If
'If I'm over the bottom boundry, drop back to right against that edge
If Me.Location.Y + Me.Height > _
MdiParent.ClientRectangle.Height - HEIGHT_OF_MENU_STATUS_BARS Then
MyBase.Location = New System.Drawing.Point( _
MyBase.Location.X, (MdiParent.ClientRectangle.Height - _
Me.Height - HEIGHT_OF_MENU_STATUS_BARS))
End If
'If I'm over the top boundry, drop back to the edge
If Me.Location.Y < 0 Then
MyBase.Location = New System.Drawing.Point(MyBase.Location.X, 0)
End If
'If I'm over the left boundry, drop back to the edge
If Me.Location.X < 0 Then
MyBase.Location = New System.Drawing.Point(0, MyBase.Location.Y)
End If
End If
alreadyMoved = False
End Sub
person
Jeff
schedule
02.03.2009
Чтобы уточнить, то, что вы называете «рабочий стол» клиента MDI, - это клиентская область.
Вы можете обрабатывать обработчики событий изменения размера / перемещения дочерних форм, а затем изменять размер / ограничивать перемещение дочерних форм, когда они превышают границы клиентской области MDI.
person
casperOne
schedule
02.03.2009