0
我的問題是如何將一個孩子mdi錨定到它的父親mdi,這樣每次用戶展開或最小化父表單時,子表單都會自動跟隨。我已經嘗試過在窗體中使用調整大小功能,但它並沒有幫助 感謝所有幫助,感謝在vb.net 2010中錨定一個表格
我的問題是如何將一個孩子mdi錨定到它的父親mdi,這樣每次用戶展開或最小化父表單時,子表單都會自動跟隨。我已經嘗試過在窗體中使用調整大小功能,但它並沒有幫助 感謝所有幫助,感謝在vb.net 2010中錨定一個表格
請看下面 - 我寫的一個快速版本,它似乎處理大多數錨定方案。您可能需要稍微修飾一下這些代碼。但是,這應該讓你開始:
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
對於臥式固定時,使用以下規則:
相同的原則適用於垂直錨定,分別爲頂部和底部。
你可以得到完整的項目與here (Mediafire)玩。
我不認爲這是可能的。 MDI的父母和孩子處於不同的關係,孩子不應該以任何方式對父母的大小作出反應,除非兒童被停靠/最大化。 – Neolisk
,這意味着我不能以編程方式更改子窗體的大小?我希望每次調整大小時都能獲得父窗體的大小,然後將其與子窗體的大小相等 –
您*可以*這樣做,但這並不意味着您應該這樣做。用戶在使用MDI界面時有一定的期望。其中之一就是我所描述的。 – Neolisk