如何使用for循环创建多个按钮控件,而又不使控件重叠并且不使用Vb.Net中的location属性。 我已经动态创建了n个vb控件,但是创建的控件彼此重叠。当我对每个控件使用location属性时,将根据位置值显示所有控件。 真正的问题是,我正在使用宽度为300且高度为300的面板,在该面板下,我需要显示动态创建的控件。我已经弄清楚了这是一件乏味的工作,并且确实需要很多时间。我的想法是找到面板的宽度和高度,然后需要检查正在创建的新控件是否有足够的空间容纳面板内部。
我只需要知道几件事, 1)如何使用for循环动态显示控件,而又不会彼此重叠并且不使用location属性。 2)我需要容器或面板根据动态创建的控件数量增长。 3)访问使用ID显示的每个控件,或者教育或向我解释任何更好的主意。
答案 0 :(得分:1)
我创建了一个新的WinForms项目,并在表单顶部添加了一个Button
。我在其下添加了一个FlowLayoutPanel
,并使它足够窄以适合单个Button
的宽度。我将FLP的AutoSize
属性设置为True
,并将FlowDirection
属性设置为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
。正如预期的那样,每次单击都会在FLP的垂直列中添加一个新的Button
,并调整表格的大小以适合。为了使用代码访问此类控件,您只需索引FLP的Controls
集合即可。
答案 1 :(得分:0)
尝试一下对您有帮助。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
'Do Something
Else
'Do Something else
End If
Panel1.Controls.Clear()
For i As Integer = 0 To 10 Step 1
Dim b15 As New Button
b15.Text = "Test3"
b15.ID = "a" & i
AddHandler b15.Click, AddressOf updateFunc
Panel1.Controls.Add(b15)
Next
End Sub