мой вопрос заключается в том, как привязать дочерний mdi к его родительскому mdi, чтобы каждый раз, когда пользователь расширяет или сводит к минимуму родительскую форму, автоматически следует дочерняя форма. Я уже пытался использовать функцию изменения размера в форме, но это не помогает благодарит за помощь, указаннуюЗакрепление формы в vb.net 2010
0
A
ответ
0
См. Ниже - краткую версию, которую я написал, которая, как представляется, обрабатывает большинство сценариев привязки. Возможно, вам придется немного отполировать этот код. Но это должно вам начать работу:
Imports System.ComponentModel
Public Class MDIChildForm
Dim p_eMyAnchor As AnchorStyles
Dim p_mdiParent As Form
Dim p_iOldHeight, p_iOldWidth As Integer
<DefaultValue(AnchorStyles.Left Or AnchorStyles.Top)>
Public Property MyAnchor As AnchorStyles
Get
Return p_eMyAnchor
End Get
Set(value As AnchorStyles)
p_eMyAnchor = value
chkAnchorTop.Checked = (p_eMyAnchor And AnchorStyles.Top)
chkAnchorLeft.Checked = (p_eMyAnchor And AnchorStyles.Left)
chkAnchorRight.Checked = (p_eMyAnchor And AnchorStyles.Right)
chkAnchorBottom.Checked = (p_eMyAnchor And AnchorStyles.Bottom)
End Set
End Property
Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
p_eMyAnchor = AnchorStyles.Left Or AnchorStyles.Top
End Sub
Public Sub ShowAsMDIChild(mdiParent As Form)
p_mdiParent = mdiParent
Me.MdiParent = mdiParent
AddHandler mdiParent.ResizeBegin, AddressOf MDIParentForm_ResizeBegin
AddHandler mdiParent.ResizeEnd, AddressOf MDIParentForm_ResizeEnd
Me.Show()
End Sub
Private Sub MDIParentForm_ResizeBegin(sender As Object, e As EventArgs)
Dim frm As Form = DirectCast(sender, Form)
p_iOldWidth = frm.Width
p_iOldHeight = frm.Height
End Sub
Private Sub MDIParentForm_ResizeEnd(sender As Object, e As EventArgs)
Dim parentForm As Form = DirectCast(sender, Form)
'handling for horizontal anchoring
Dim deltaWidth As Integer = parentForm.Width - p_iOldWidth
Dim fAnchorLeft As Boolean = p_eMyAnchor And AnchorStyles.Left
Dim fAnchorRight As Boolean = p_eMyAnchor And AnchorStyles.Right
Select Case fAnchorLeft
Case True : If fAnchorRight Then Me.Width += deltaWidth
Case False
Dim coef As Single = If(fAnchorRight, 1, 0.5)
Me.Left += deltaWidth * coef
End Select
'handling for vertical anchoring
Dim deltaHeight As Integer = parentForm.Height - p_iOldHeight
Dim fAnchorTop As Boolean = p_eMyAnchor And AnchorStyles.Top
Dim fAnchorBottom As Boolean = p_eMyAnchor And AnchorStyles.Bottom
Select Case fAnchorTop
Case True : If fAnchorBottom Then Me.Height += deltaHeight
Case False
Dim coef As Single = If(fAnchorBottom, 1, 0.5)
Me.Top += deltaHeight * coef
End Select
End Sub
End Class
Для горизонтальной анкеровки, используются следующие правила:
- левого - ничего не происходит (поведение по умолчанию)
- слева и справа - расширение ширины к исходной форме ширина delta
- правый - перемещение влево по размеру родительской формы delta
- no anchor - перемещение влево на половину родительской формы ширина delta.
Тот же принцип применяется к вертикальному креплению, соответственно сверху и снизу.
Вы можете получить полный проект, чтобы играть с here (Mediafire).
Смежные вопросы
- 1. Закрепление URL действие формы
- 2. Закрепление формы PHP контакта
- 3. VB.net 2010 - Получение исходных значений формы ребенка из основной формы
- 4. AngularJS - Закрепление формы в шаблонах ng-include
- 5. индексирование в vb.net 2010
- 6. Проверьте, открыт ли конкретный экземпляр формы в vb.net 2010
- 7. Скачать файл в VB.NET 2010
- 8. vb.net сохранить в Word 2010
- 9. Модель OSI в VB.Net 2010
- 10. ListView в VB.NET (VS 2010)
- 11. номер форматирования в vb.net 2010
- 12. Многомерные массивы в VB.NET 2010
- 13. VB.Net 2010 Installer
- 14. vb.net 2010 ListView
- 15. VB.net Express 2010 eval?
- 16. RNG in VB.Net 2010
- 17. VB.NET 2010 ADD ЗАЯВЛЕНИЕ
- 18. Печать формы InfoPath 2010 в SharePoint 2010
- 19. Формы в VB.Net
- 20. Закрытие формы в VB.NET
- 21. Таймер для счета в VB.Net 2010?
- 22. , который sourcesafe интегрирован с vb.net (vb 2010)?
- 23. Закрепление кнопки «Закрепление настроек» для Android
- 24. Закрепление запроса POST
- 25. vb.net 2008/2010 tabcontrol и код
- 26. сериализации DataTable источника vb.net 2010
- 27. vb.net 2010 Розетки внезапно останавливаются?
- 28. ошибка в if if в vb.net 2010
- 29. Обновление формы в Access 2010
- 30. Закрепление печенье в ASP.NET
Я не думаю, что это возможно. Родитель MDI и ребенок находятся в другом отношении, ребенок не должен реагировать на размер родителя каким-либо образом, если ребенок не застыл/не был максимизирован. – Neolisk
, так что это означает, что я не могу изменить размер дочерней формы программно? я надеялся получить размер родительской формы при каждом изменении размера, а затем приравнять ее к размеру дочерней формы. –
Вы * можете * сделать это, но это не значит, что вам нужно. Есть определенные ожидания, которые пользователь имеет при работе с интерфейсом MDI. Один из них - это то, что я описал. – Neolisk