我想知道如何在VB.NET,WinForms中在运行时创建和更改TableLayoutPanel。
我已经看过MSDN documentation,但我似乎无法理解如何改变列/行的数量(即创建新的列),也不知道如何更改列值/行的值任何细胞。
我的目标是拥有一个包含16个标签的4x4网格,其文本来自多维(4x4)整数数组。
我目前的代码是:
Dim table As New TableLayoutPanel
table.ColumnCount = 4
table.RowCount = 4
table.RowStyles.Add(New RowStyle(SizeType.Absolute, 8.0F))
这是基于MSDN示例,但我不确定如何使用RowStyles.Add(
多个参数)
方法。谁能解释一下呢?
答案 0 :(得分:2)
以下内容将在运行时创建TableLayoutPanel
和所有标签。它是完全可调的,因为你有一个任何大小的二维数组,它将显示该数组中的所有值。使用此代码示例应该向您展示如何在运行时动态地向TableLayoutPanel
添加行和列。
Public Class Form1
Friend WithEvents TableLayout As TableLayoutPanel
Private DataArray(,) As Integer = New Integer(3, 3) {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Me.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowAndShrink
Me.AutoSize = True
TableLayout = New TableLayoutPanel
With TableLayout
.Name = "tableLayout"
.Margin = New System.Windows.Forms.Padding(0, 0, 0, 0)
.ColumnCount = 0
.RowCount = 0
.Dock = DockStyle.Fill
.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowAndShrink
.AutoSize = True
End With
Me.Controls.Add(TableLayout)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
For x = LBound(DataArray, 1) To UBound(DataArray, 1)
Me.TableLayout.ColumnCount += 1
Me.TableLayout.ColumnStyles.Add(New ColumnStyle(SizeType.AutoSize))
For y = LBound(DataArray, 2) To UBound(DataArray, 2)
If y = LBound(DataArray, 2) Then
Me.TableLayout.RowCount += 1
Me.TableLayout.RowStyles.Add(New ColumnStyle(SizeType.AutoSize))
End If
Dim lbl = New Label
With lbl
.Name = "lbl" & x & y
.TextAlign = ContentAlignment.MiddleCenter
.Text = "Value: " & DataArray.GetValue(x, y)
.Dock = DockStyle.Fill
.AutoSize = True
End With
Me.TableLayout.Controls.Add(lbl, y, x)
Next
Next
End Sub
End Class
答案 1 :(得分:1)
我建议您使用Designer创建TableLayoutPanel,然后检查Designer.cs(在您的案例中为Designer.vb)类中自动生成的代码。这是C#中的小例子:
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 4;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.Location = new System.Drawing.Point(252, 75);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 4;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(200, 100);
this.tableLayoutPanel1.TabIndex = 4;
要向TableLayout添加控件,请使用它控制属性。例如:
private void button2_Click(object sender, EventArgs e)
{
Label label = new Label();
label.Text = "Hello!";
tableLayoutPanel1.Controls.Add(label, 0, 0);
}
enter code here