gpt4 book ai didi

c# - Winforms TableLayoutPanel 以编程方式添加行

转载 作者:IT王子 更新时间:2023-10-29 03:39:01 27 4
gpt4 key购买 nike

我已经为此苦苦挣扎了一段时间,并且发现许多其他人也在与 TableLayoutPanel (.net 2.0 Winforms) 作斗争。

问题

我正在尝试使用一个“空白”的 tablelayoutpanel,它定义了 10 列,然后在运行时以编程方式添加控件行(即每个单元格一个控件)。

有人可能认为它应该像

一样简单
myTableLayoutPanel.Controls.Add(myControl, 0 /* Column Index */, 0 /* Row index */);

但这(对我而言)不会添加行。所以也许添加行样式

myTableLayoutPanel.RowStyles.Clear();
myTableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));

但这也行不通。我四处寻找,发现 myTableLayoutPanel.RowCount 用法从设计时到运行时都会发生变化,因此执行 myTableLayoutPanel.RowCount++; 实际上并没有添加另一行,甚至在为其添加 RowStyle 条目之前/之后!

我遇到的另一个相关问题是控件将被添加到显示中,但它们都只是在 TableLayoutPanel 的 0,0 点呈现,此外它们甚至没有被限制在它们所在的单元格边界内应该显示在其中(即 Dock = DockStyle.Fill 它们仍然显得太大/太小)。

有人有在运行时添加行和控件的工作示例吗?

最佳答案

我上周刚做的。将 TableLayoutPanel 上的 GrowStyle 设置为 AddRowsAddColumns,然后您的代码应该可以工作:

// Adds "myControl" to the first column of each row
myTableLayoutPanel.Controls.Add(myControl1, 0 /* Column Index */, 0 /* Row index */);
myTableLayoutPanel.Controls.Add(myControl2, 0 /* Column Index */, 1 /* Row index */);
myTableLayoutPanel.Controls.Add(myControl3, 0 /* Column Index */, 2 /* Row index */);

这是一些看起来与您正在做的相似的工作代码:

    private Int32 tlpRowCount = 0;

private void BindAddress()
{
Addlabel(Addresses.Street);
if (!String.IsNullOrEmpty(Addresses.Street2))
{
Addlabel(Addresses.Street2);
}
Addlabel(Addresses.CityStateZip);
if (!String.IsNullOrEmpty(Account.Country))
{
Addlabel(Address.Country);
}
Addlabel(String.Empty); // Notice the empty label...
}

private void Addlabel(String text)
{
label = new Label();
label.Dock = DockStyle.Fill;
label.Text = text;
label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
tlpAddress.Controls.Add(label, 1, tlpRowCount);
tlpRowCount++;
}

TableLayoutPanel 总能给我合适的尺寸。在我上面的示例中,我正在提交一个地址卡,该地址卡可能会根据具有第二行地址的帐户或国家/地区而增长或缩小。因为表格布局面板的最后一行或最后一列会拉伸(stretch),所以我将空标签放在那里以强制生成一个新的空行,然后一切都很好地排列。

这是设计器代码,因此您可以看到我开头的表格:

        //
// tlpAddress
//
this.tlpAddress.AutoSize = true;
this.tlpAddress.BackColor = System.Drawing.Color.Transparent;
this.tlpAddress.ColumnCount = 2;
this.tlpAddress.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 25F));
this.tlpAddress.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tlpAddress.Controls.Add(this.pictureBox1, 0, 0);
this.tlpAddress.Dock = System.Windows.Forms.DockStyle.Fill;
this.tlpAddress.Location = new System.Drawing.Point(0, 0);
this.tlpAddress.Name = "tlpAddress";
this.tlpAddress.Padding = new System.Windows.Forms.Padding(3);
this.tlpAddress.RowCount = 2;
this.tlpAddress.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpAddress.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tlpAddress.Size = new System.Drawing.Size(220, 95);
this.tlpAddress.TabIndex = 0;

关于c# - Winforms TableLayoutPanel 以编程方式添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1142873/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com