我正在尝试制作一个面板,以承载动态添加的控件。有两个警告:
我已经看到了一些提议的解决方案,这些解决方案将动态控件集中在窗体中,但由于以下原因而拒绝了它们:
我想知道我是否缺少一些可以帮助我处理增长/收缩事件而不创建自己的TableLayoutPanel变体的功能?
编辑:
以下是功能草案:
答案 0 :(得分:3)
这是一个再现您描述的行为的示例。
它利用了承载多个FlowLayoutPanel的TableLayoutPanel。
一个重要的细节是子FlowLayoutPanel的锚定:它们需要锚定到 Top-Bottom :这会使面板位于TableLayoutPanel行的中心。
请注意,在Form构造函数中, RowStyles
之一已被删除。这也非常重要:TLP
(这是一个很古怪的家伙),即使您只有一行(或同一列,也只有一列),也将保留2 RowStyles
。第二种样式将应用于您添加的第一行;仅针对第一个,而不是其他:这可能会破坏布局。
另一个异常,它没有提供删除行的方法,所以我做了一个。它功能齐全,但很简单,需要扩展,包括进一步的验证。
请参阅有关当前功能的图形示例。如果您在实施其他方面需要帮助,请发表评论。
要构建此表单,请将以下控件添加到表单(在这里称为 FLPTest1
):
Dock.Bottom
。右键单击,然后SendToBack()
TableLayoutPanel
(在这里称为 tlp1
),设置为:
AutoScroll = true
,AutoSize = true
,AutoSizeMode = GrowAndShrink
,Dock.Fill
FlowLayoutPanel
内添加一个flp1
(在这里称为 TableLayoutPanel
)。实际上没有必要,仅对于此示例代码
Top, Bottom <=
,即!important
,如果没有它,布局将无法正常工作:它可以将FLP
居于{ {1}}行,TLP
,AutoSize = true
AutoSizeMode = GrowAndShrink
)btnAddControl
)btnRemoveControl
)
chkRandom