首页 > 解决方案 > 如何在不使用位置属性的情况下使用 for 循环创建任何一个动态控件,并且表单应该自动增长

问题描述

如何使用 for 循环创建多个按钮控件而不使控件重叠并且不使用 Vb.Net 中的位置属性。我已经动态创建了“n”个 vb 控件,但是创建的控件彼此重叠。当我对每个控件使用位置属性时,所有控件都会根据位置值显示。真正的问题是,我正在使用宽度为 300 和高度为 300 的面板,在此面板下我需要显示动态创建的控件。我已经弄清楚这是一项乏味的工作并且确实需要很多时间。我的想法是找到面板的宽度和高度,然后需要检查正在创建的新控件是否有足够的空间容纳在面板内。

我需要知道几件事,1)如何使用 for 循环动态显示控件,而不会相互重叠并且不使用 location 属性。2)我需要容器或面板根据动态创建的控件数量增长。3) 访问使用 ID 显示的每个控件,或者教育或解释我任何更好的想法。

标签: vb.net

解决方案


我创建了一个新的 WinForms 项目并Button在表单顶部添加了一个。我FlowLayoutPanel在它下面加了一个,使它足够窄以适应单个Button宽度。我将AutoSizeFLP 的属性设置为TrueFlowDirectionto TopDown。然后我添加了这段代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'Create the new Button.
    Dim btn As New Button

    'Add it to the FLP
    FlowLayoutPanel1.Controls.Add(btn)

    'Get the position of the bottom, left of the Button relative to the form.
    Dim pt = PointToClient(btn.PointToScreen(New Point(0, btn.Height)))

    'Resize the form to provide clearance below the new Button.
    ClientSize = New Size(ClientSize.Width, pt.Y + 10)
End Sub

然后我运行该项目并开始单击Button我添加的。正如预期的那样,每次单击都会Button在垂直列中添加一个新的 FLP,并调整表单大小以适应。为了在代码中访问这些控件,您可以简单地索引ControlsFLP 的集合。


推荐阅读