最近在弄一个聊天界面,见下图,需要实现滚动条功能,滚动条实际上就用panel的autoScroll=True,然后等控件高度超过panel本身高度就会自动出现。
重要的事情说三遍:Panel设置完AutoScroll=True以后,只要控件内部控件高度超过Panel,就可以自动滚动。
测试代码,这个代码实现点击一下,添加一个按钮到p1。当按钮多了以后,就会自动显示滚动条。
int count = 0;
private void btnAdd_Click(object sender, EventArgs e)
{
Button btn = new Button();
btn.Width = 150;
btn.Height = 70;
btn.Top = 80 * count;
btn.Left = 10;
btn.Text = String.Format("按钮{0:d3}", count);
p1.Controls.Add(btn);
count++;
}
见下图,好像没有啥问题。
如果Panel宽度变了,里面的按钮,宽度也要变。这个也简单,设置一下anchor ,设置左右就行了。见下面代码:
int count = 0;
private void btnAdd_Click(object sender, EventArgs e)
{
Button btn = new Button();
btn.Width = 180;
btn.Height = 70;
btn.Top = 80 * count;
btn.Left = 10;
btn.Anchor = AnchorStyles.Left | AnchorStyles.Right;//设置左右会变化
btn.Text = String.Format("按钮{0:d3}", count);
p1.Controls.Add(btn);
count++;
}
运行效果,按钮会随着panel大小变化,但是滚动条没有出现。(蓝色垂直条是spliter)
经过测试发现,必须给按钮添加到AnchorStyles.Top。才会使滚动条出来。
经过测试发现,必须给按钮添加到AnchorStyles.Top。才会使滚动条出来。
经过测试发现,必须给按钮添加到AnchorStyles.Top。才会使滚动条出来。
int count = 0;
private void btnAdd_Click(object sender, EventArgs e)
{
Button btn = new Button();
btn.Width = 180;
btn.Height = 70;
btn.Top = 80 * count;
btn.Left = 10;
//必须加上AnchorStyles.Top
btn.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;//设置左右会变化
btn.Text = String.Format("按钮{0:d3}", count);
p1.Controls.Add(btn);
count++;
}
添加完 AnchorStyles.Top,运行测试:成功了
结论:Panel自动滚动,子控件必须设置 AnchorStyles.Top,不设置不行。