我正在尝试创建一个StackPanel
用户控件,允许我以垂直方式堆叠新添加的控件(如WPF StackPanel但使用Windows窗体)。
我使用下面显示的核心代码创建了一个新的用户控件,但即使我的位置在设计器中获得了对齐的正确值,我也可以弹出消息框,设计器视图不会重新排列我拖放到的子控件我的堆栈面板,也在运行时我的位置似乎被设计师认为正确的位置覆盖(我放置控件的位置)
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
答案 0 :(得分:0)
通常,这些事情将通过实施自定义LayoutEngine来完成。 Msdn也有一个样本。
我不确定为什么你的代码不起作用,没有理由支持它,因为它有很大的缺陷。您只是在添加新控件时才设置位置。还有很多。您需要考虑何时删除控件,隐藏某些控件(可见设置为false),更改大小时,填充更改等等。
所以,我建议您使用FlowLayoutPanel
而不是重新发明轮子。如果你想自己实现它,那就做吧。我的意思是创建您的LayoutEngine
,如提供的链接所示。事实上,这个链接确实有你需要的东西。