vb.net - 如何在不使用位置属性的情况下使用 for 循环创建任何一个动态控件,并且表单应该自动增长
问题描述
如何使用 for 循环创建多个按钮控件而不使控件重叠并且不使用 Vb.Net 中的位置属性。我已经动态创建了“n”个 vb 控件,但是创建的控件彼此重叠。当我对每个控件使用位置属性时,所有控件都会根据位置值显示。真正的问题是,我正在使用宽度为 300 和高度为 300 的面板,在此面板下我需要显示动态创建的控件。我已经弄清楚这是一项乏味的工作并且确实需要很多时间。我的想法是找到面板的宽度和高度,然后需要检查正在创建的新控件是否有足够的空间容纳在面板内。
我需要知道几件事,1)如何使用 for 循环动态显示控件,而不会相互重叠并且不使用 location 属性。2)我需要容器或面板根据动态创建的控件数量增长。3) 访问使用 ID 显示的每个控件,或者教育或解释我任何更好的想法。
解决方案
我创建了一个新的 WinForms 项目并Button
在表单顶部添加了一个。我FlowLayoutPanel
在它下面加了一个,使它足够窄以适应单个Button
宽度。我将AutoSize
FLP 的属性设置为True
和FlowDirection
to 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,并调整表单大小以适应。为了在代码中访问这些控件,您可以简单地索引Controls
FLP 的集合。
推荐阅读
- docker - 使用 JDBC 输入插件在 Docker 上的 Logstash 不会从 SQL Server 获取所有行
- flutter - 如何突出显示我在字符串中搜索的确切单词,而不仅仅是字符串的开头?
- flutter - 如何实时获取文档长度
- javascript - Reactjs 从获取请求中返回一个对象
- javascript - Nginx 正在尝试打开文件而不是重定向到代理
- python - _joint_log_likelihood 给我错误的值
- sql - 如何按日期获取最后一件商品的价格
- python-3.x - 定期执行功能而不停止其他操作
- r - 使用 R 从 PDF 表单到数据框的文本挖掘
- r - 如果 r 中出现错误,则转到 lapply() 的下一次迭代