VB.NET 3dline usercontrol,左右锚定到父级

时间:2012-10-16 14:08:07

标签: vb.net

我正在尝试创建一个usercontrol,这是一条位于“Ok”和“Cancel”按钮上方的3D线,有时会在Thunderbird窗口中看到:

http://s11.postimage.org/gh45ux9wj/thunderbird1.png

我不希望每次将usercontrol放在表单上时都手动设置anchor属性,这就是为什么我想在usercontrol中将它自动停靠到父级(Left = 0,Width) = Parent.Width)。

但是,我真的没办法这样做。

我的尝试很多,所以我不确定我应该在这里发布什么。

我的假设是我应该使用

Private Sub UserControl1_ParentChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ParentChanged

    Me.SetBounds(0, Me.Top, Me.Parent.Width, 0, BoundsSpecified.X Or BoundsSpecified.Y Or BoundsSpecified.Width)

End Sub

但这根本不起作用。

1 个答案:

答案 0 :(得分:1)

您需要向父级Resize事件添加事件处理程序,以便每次父级的大小更改时都会通知您。例如,像这样的东西会起作用:

Public Class ThreeDLine
    Private _lastParent As Control

    Private Sub Parent_Resize(ByVal sender As Object, ByVal e As EventArgs)
        resizeToParentWidth()
    End Sub

    Private Sub Divider_ParentChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ParentChanged
        If _lastParent IsNot Nothing Then
            RemoveHandler _lastParent.Resize, AddressOf Parent_Resize
        End If
        _lastParent = Parent
        If Parent IsNot Nothing Then
            AddHandler Parent.Resize, AddressOf Parent_Resize
            resizeToParentWidth()
        End If
    End Sub

    Private Sub resizeToParentWidth()
        If Parent IsNot Nothing Then
            Me.Left = 0
            Me.Width = Parent.ClientSize.Width
        End If
    End Sub
End Class