TableLayoutPanel 中的垂直滚动条
vertical ScrollBar in TableLayoutPanel
如果内容高于面板本身,我希望能够在 TableLayoutPanel
内滚动。
我试过:
- 将
AutoScroll
设置为 true
(添加 unnecessary horizontal scrollbar)
- 另外在右侧添加 Padding 以防止出现水平滚动条(在内容和滚动条之间留下讨厌的间隙)
- 将
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();
}
}
您发布的代码对我有用,只需将自动滚动设置为 true,然后 tlp.HorizontalScroll.Visible = false;
编辑:
无论如何,我只是注意到了水平条,我的决议隐藏了它。无论如何,将自动滚动设置为 false,然后添加
tlp.AutoScroll = true;
后
tlp.ResumeLayout();
在 Add10Lines() 方法中。
为什么不尝试将 HorizontalScroll 的高度设置为大于容器的值。
我想说的是,如果TableLayoutPanel的高度是300,那么Scroll的高度就是350。
尝试向 Scroll 添加高度,该高度应大于 TableLayoutPanel 高度
您在代码中使用了以下行,因此您没有获得垂直滚动条:
tlp.Dock = DockStyle.Fill;
与其使用它,不如试试下面这行,它可能对你有用:
tlp.Dock = DockStyle.Top;
如果内容高于面板本身,我希望能够在 TableLayoutPanel
内滚动。
我试过:
- 将
AutoScroll
设置为true
(添加 unnecessary horizontal scrollbar) - 另外在右侧添加 Padding 以防止出现水平滚动条(在内容和滚动条之间留下讨厌的间隙)
- 将
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();
}
}
您发布的代码对我有用,只需将自动滚动设置为 true,然后 tlp.HorizontalScroll.Visible = false;
编辑:
无论如何,我只是注意到了水平条,我的决议隐藏了它。无论如何,将自动滚动设置为 false,然后添加
tlp.AutoScroll = true;
后
tlp.ResumeLayout();
在 Add10Lines() 方法中。
为什么不尝试将 HorizontalScroll 的高度设置为大于容器的值。
我想说的是,如果TableLayoutPanel的高度是300,那么Scroll的高度就是350。
尝试向 Scroll 添加高度,该高度应大于 TableLayoutPanel 高度
您在代码中使用了以下行,因此您没有获得垂直滚动条:
tlp.Dock = DockStyle.Fill;
与其使用它,不如试试下面这行,它可能对你有用:
tlp.Dock = DockStyle.Top;