Vb.net re:用户控件在设计器和运行时的行为

Vb.net re:用户控件在设计器和运行时的行为,vb.net,winforms,Vb.net,Winforms,我正在尝试创建一个StackPanel用户控件,该控件允许我以垂直方式堆叠新添加的控件(类似于WPF StackPanel,但使用Windows窗体) 我用下面所示的核心代码创建了一个新的用户控件,但即使我的位置在designer I can pop消息框中被指定为正确的值,designer视图也不会重新排列我拖放到堆栈面板上的子控件,而且在运行时,我的位置似乎被设计器认为正确的内容覆盖(我放置控件的位置) 通常,这类事情将通过实现custom.Msdn来完成 < P >我不确定为什么你的代码不

我正在尝试创建一个
StackPanel
用户控件,该控件允许我以垂直方式堆叠新添加的控件(类似于WPF StackPanel,但使用Windows窗体)

我用下面所示的核心代码创建了一个新的用户控件,但即使我的位置在designer I can pop消息框中被指定为正确的值,designer视图也不会重新排列我拖放到堆栈面板上的子控件,而且在运行时,我的位置似乎被设计器认为正确的内容覆盖(我放置控件的位置)


通常,这类事情将通过实现custom.Msdn来完成

< P >我不确定为什么你的代码不起作用,因为它是非常有缺陷的,没有理由去做它。你只是在添加新控件时设置位置。还有很多。你需要考虑何时移除控件,当某些控件被隐藏(可见设置为false),当大小改变,填充改变等时,


因此,我建议您不要重新设计控制盘。如果您想自己实现它,请正确操作。我的意思是创建您的
LayoutEngine
,如提供的链接所示。事实上,该链接确实满足您的需要。

您为什么要重新设计控制盘?请改用
FlowLayoutPanel
。谢谢,是的,这绝对是正确的方式。尽管我仍然想理解为什么我的UserControl不能像我希望的那样工作。上面的示例只是我正在处理的控件的简化。
Public Class StackPanel
    Inherits Panel
    Private biasHeight As Integer = 0
    Private Sub StackPanel_ControlAdded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ControlEventArgs) Handles MyBase.ControlAdded
        Dim newControl As System.Windows.Forms.Control = e.Control
        '
        ' NOT WORKING: Set location of the newly added control in a panel and at runtime
        '
        newControl.Location = New System.Drawing.Point(0, biasHeight)
        '
        ' Store the y-cooridnate of the next control
        '
        biasHeight = biasHeight + newControl.Height
    End Sub
End Class