想要以这样的方式使用WinForms的TableLayoutPanel:每行有两列,一列占80%,第二列占20%。在第一列中,有一个TextBox,在第二列中:一个按钮。我已经做了一个按钮,将这样的行添加到表中,但是,正如视频中所看到的,这变得***可怕***。在此之前,我使用FlowLayoutPanel,但被建议使用Table-代替。下面是一个演示视频:https://youtu.be/4hcBAeWCtTQ|下面是添加按钮代码:
private void manual_packages_add_Click(object sender, EventArgs e) {
static Size MulSize(Size sz, Size accord, int percent) {
static float Percent(float n, int p) => n * (p / 100);
SizeF origF = (SizeF)sz;
SizeF accordF = (SizeF)accord;
origF.Height += Percent(accordF.Height, percent);
return origF.ToSize();
}
TextBox tbx = new() {
Name = $"manual_packages_pkg{manual_nextPkgTbxIndex++}",
Size = new((int)Math.Round(manual_packages_list.ColumnStyles[0].Width),
(int)Math.Round(manual_packages_list.RowStyles[0].Height)),
MaxLength = 34,
BorderStyle = BorderStyle.Fixed3D,
};
Button rm = new() { Name = $"manual_packages_rm{manual_nextPkgTbxIndex}",
Text = "i suffer 💀💀💀💀💀" };
manual_packages_list.Controls.Add(tbx, 0, manual_packages_list.RowCount++);
manual_packages_list.Controls.Add(rm, 1, manual_packages_list.RowCount++);
// sizing
Control? container = tbx.Parent;
bool firstIter = true;
while (true) {
container = firstIter ? container : container.Parent;
if (container == null)
break;
container.Size = MulSize(container.Size, tbx.Size, 100);
firstIter = false;
}
}
- 初始状态 *
- 点击了3次添加按钮 *
- 点击添加按钮4次以上 *
我试着删除尺寸(这没有产生任何好处),我编码它对齐所有东西,但它没有工作。
1条答案
按热度按时间smdnsysy1#
您应该做的是在
TableLayoutPanel
中显示边框,您会看到实际上每行只添加了一个控件,而不是两个。问题在这里:您正在增加这两行中的
manual_packages_list.RowCount
,因此每个控件都将添加到不同的行中。如果您希望将这两个控件添加到同一行,则不能在添加第一个控件后增加行数。至少,删除第一行的增量:话虽如此,我不认为这是真正的方法。我认为您应该从行数1开始,然后,当您想向第二行添加控件时,您应该先增加行数,然后添加两个控件。实际上看起来像这样:
按照您(打算)的方式,您已经在表中有一个空行,其中没有控件,然后您向该行添加控件,然后添加另一个空行。如果默认情况下没有空行,只在需要时添加一个空行,然后向其中添加控件,这会更有意义。