【发布时间】:2021-01-30 01:09:27
【问题描述】:
我想创建一个二维数组以在行和列中绘制复选框。然而,这条线不起作用: CheckB_Well(rows_C1, cols_C1).Location = 新点(40 + 50 * cols_C1, 20 + 25 * (well_rows - 1 - rows_C1))
复选框未显示在定义的位置。
Sub Check_Panel()
Me.GroupBox3.Controls.Clear()
Dim CheckB_Well(,)
Dim rows_C1 As Integer
Dim cols_C1 As Integer
If Opt6.Checked = True Then
well_number = 6
well_rows = 2
well_cols = 3
ElseIf Opt12.Checked = True Then
well_number = 12
well_rows = 3
well_cols = 4
ElseIf Opt24.Checked = True Then
well_number = 24
well_rows = 4
well_cols = 6
End If
ReDim CheckB_Well(well_rows - 1, well_cols - 1)
For rows_C1 = 0 To well_rows - 1
For cols_C1 = 0 To well_cols - 1
CheckB_Well(rows_C1, cols_C1) = New CheckBox
CheckB_Well(rows_C1, cols_C1).Name = "Well" + Str(rows_C1) + ";" + Str(cols_C1)
CheckB_Well(rows_C1, cols_C1).Text = Str(rows_C1) + ";" + Str(cols_C1)
CheckB_Well(rows_C1, cols_C1).Visible = True
If rows_C1 Mod 2 = 0 Then
CheckB_Well(rows_C1, cols_C1).Location = New Point(40 + 50 * cols_C1, 20 + 25 * (well_rows - 1 - rows_C1))
Else
CheckB_Well(rows_C1, cols_C1).Location = New Point(40 + 50 * (well_cols - 1 - cols_C1), 20 + 25 * (well_rows - 1 - rows_C1))
End If
Me.GroupBox3.Controls.Add(CheckB_Well(rows_C1, cols_C1))
Next cols_C1
Next rows_C1
End Sub
【问题讨论】:
-
没有理由必须设置控件的
Location。使用TableLayoutPanel作为容器。您只需设置适当数量的行数和列数,然后将Add您的CheckBoxes设置为它的Controls集合。它将根据您的配置自动布局子控件。 -
或者 FlowLayoutPanel 如果您只需要在向容器添加或删除控件时对齐控件(顺便说一句,要从控件集合中删除控件,请仅在您已经使用
[Container].Controls.Remove(control)时使用处理在运行时构建的控件列表或数组,并将这些现有控件添加到容器中,否则使用control.Dispose())。当窗体关闭时,处理该集合中的控件。 -
与您的
Me.GroupBox3.Controls.Clear()相同:使用向后的For循环(从Me.GroupBox3.Controls.Count - 1到0)并在循环中的当前索引处处理控件。跨度>