Windows形成分层

时间:2016-09-05 14:10:37

标签: c# windows forms

我正在编写Windows Forms应用程序。我有一些TableLayoutContainer元素的问题。或者行叠加(不需要滚动条)或第一行和第二行之间有很大的间隔。 我需要一个根据表单大小动态更改大小的容器,自动垂直滚动(如果容器的大小为大)。请帮我纠正我的代码或容器的属性。

            Label LabelG = new Label[len];
            NumericUpDown NumberControlBars = new NumericUpDown[len];

            for (int i = 0; i < len; i++)
            {
            TablePanelContainer.RowCount++;
            TablePanelContainer.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));                

            LabelG[i] = new System.Windows.Forms.Label();
            LabelG[i].Name = "Label" + i.ToString();
            LabelG[i].Size = new System.Drawing.Size(40, 23);
            LabelG[i].Text = Groups[i].ToString();
            LabelG[i].Dock = DockStyle.Right;
            LabelG[i].Anchor = (AnchorStyles.Right | AnchorStyles.Top);
            LabelG[i].TextAlign = ContentAlignment.MiddleRight;                
            TablePanelContainer.Controls.Add(LabelG[i], 0, i);

            NumberControlBars[i] = new System.Windows.Forms.NumericUpDown();
            NumberControlBars[i].Name = "Label" + i.ToString();
            NumberControlBars[i].MaximumSize = new System.Drawing.Size(40,23);
            NumberControlBars[i].Text = "0";
            NumberControlBars[i].Dock = DockStyle.Left;
            NumberControlBars[i].Anchor = (AnchorStyles.Left | AnchorStyles.Top);
            TablePanelContainer.Controls.Add(NumberControlBars[i], 1, i);
            }

Properties Bug

1 个答案:

答案 0 :(得分:1)

我在一个小应用程序中重新创建了您的功能。这些是TablePanelLayout控件的设置

  • 锚点:顶部,底部,左侧,右侧
  • AutoScroll:True
  • AutoSize:False

特别是AutoSize设置为false非常重要。如果你不这样做,控件将自己调整到适应所有行所需的高度。因为在这种情况下容器有足够的空间来显示它不会显示滚动条的所有内容。它并不关心它的大小是否适合表格。

这就是设计师的样子:

tablelayoutpanel in design mode and properties

为了克服第一行的怪癖我改编了第一行的风格。看起来设计师在这里扮演一些技巧。您的代码将如下所示。

tableLayoutPanel1.SuspendLayout();
// adapt styling of first row
if (tableLayoutPanel1.RowStyles.Count > 0)
{
    tableLayoutPanel1.RowStyles[0].SizeType = SizeType.Absolute;
    tableLayoutPanel1.RowStyles[0].Height = 25F;
}
for(int i=0; i<100; i++)
{
    var lbl = new Label();
    lbl.Text = i.ToString();
    tableLayoutPanel1.Controls.Add(lbl, 0, i);

    var num = new NumericUpDown();
    tableLayoutPanel1.Controls.Add(num,1 ,i);

    tableLayoutPanel1.RowCount++;
}

tableLayoutPanel1.ResumeLayout();

运行时,结果如下:

animation of code execution