TableLayoutPanel中的垂直ScrollBar

时间:2016-04-05 08:07:16

标签: c# winforms scroll tablelayoutpanel

如果内容高于面板本身,我希望能够在TableLayoutPanel内滚动 我试过了:

  • AutoScroll设为true(添加unnecessary horizontal scrollbar
  • 此外,在右侧添加填充以防止水平滚动条出现(在内容和滚动条之间留下令人讨厌的间隙)
  • AutoScroll设置为false,将VerticalScroll.Visible设置为true(滚动条会在内容增长时忽略,并且不允许用户滚动)

如何在没有令人讨厌的副作用的情况下获得令人愉悦的垂直滚动条?

一些可运行的代码:

public class FormTLPTest : Form
{
    TableLayoutPanel tlp;

    public FormTLPTest()
    {
        Height = 800;
        Width = 800;

        tlp = new TableLayoutPanel();
        tlp.Dock = DockStyle.Fill;
        tlp.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
        //tlp.AutoScroll = true;  //adds horizontal ScrollBar
        //tlp.Padding = new Padding(0, 0, SystemInformation.VerticalScrollBarWidth, 0); //prevents horizontal ScrollBar but adds nasty gap
        tlp.VerticalScroll.Visible = true;
        tlp.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100.0F));

        Controls.Add(tlp);

        tlp.Click += Tlp_Click;

        Add10Lines();
    }

    private void Tlp_Click(object sender, System.EventArgs e)
    {
        Add10Lines();
    }

    private void Add10Lines()
    {
        tlp.SuspendLayout();

        for (int i = 0; i < 10; i++)
        {
            Label lb2 = new Label();
            lb2.Margin = new Padding();
            lb2.Dock = DockStyle.Fill;
            lb2.BackColor = Color.White;
            lb2.Text = "Some longer Text - it contains information. Don't know what I should write to fill the space";

            lb2.Click += Tlp_Click;

            tlp.Controls.Add(lb2, 0, i);
        }

        tlp.ResumeLayout();
    }
}

3 个答案:

答案 0 :(得分:2)

您发布的代码适用于我,只需将autoscroll设置为true,然后设置为tlp.HorizontalScroll.Visible = false;

编辑: 刚注意到水平条,我的分辨率隐藏了它。无论如何,将autoscroll设置为false,然后添加
tlp.AutoScroll = true; 后 Add10Lines()方法中的tlp.ResumeLayout();

答案 1 :(得分:0)

为什么不尝试将Horizo​​ntalScroll的高度设置为大于容器的高度。

我想说的是,如果 TableLayoutPanel 的高度为300,则表示Scroll 350的高度。

尝试将高度添加到Scroll,该高度应大于 TableLayoutPanel height

答案 2 :(得分:0)

您在代码中使用以下行,因此您没有获得垂直滚动条:

tlp.Dock = DockStyle.Fill;

请尝试以下行,而不是使用它,这可能适合您:

tlp.Dock = DockStyle.Top;