FlowLayoutPanel控件不直接支持MouseWheel事件.即滚动滚轮也不会响应.所以必须手动来支持响应滚轮.
查看了一下FlowLayoutPanel控件的源码,原来FlowLayoutPanel控件是继承于Panel控件的.
所以,Panel控件也是直接不支持MouseWheel事件来进行滚动滚轮的.
源码:
///
/// 支持滚轮的FlowLayoutPanel.
///
class ScrollFlowLayoutPanel : FlowLayoutPanel
{
public ScrollFlowLayoutPanel()
{
}
protected override void OnMouseClick(MouseEventArgs e)
{
this.Focus();
base.OnMouseClick(e);
}
protected override void OnMouseEnter(EventArgs e)
{
this.Focus();
base.OnMouseEnter(e);
}
protected override void OnMouseWheel(MouseEventArgs e)
{
if (e.Delta < 0)
{
if (this.VerticalScroll.Maximum > this.VerticalScroll.Value + 50)
this.VerticalScroll.Value += 50;
else
this.VerticalScroll.Value = this.VerticalScroll.Maximum;
}
else
{
if (this.VerticalScroll.Value > 50)
this.VerticalScroll.Value -= 50;
else
{
this.VerticalScroll.Value = 0;
}
}
}
}
使用方法:
在Winform的后台代码添加了这个类之后,你就可以从工具箱里面找到ScrollFlowLayoutPanel。
与FlowLayoutPanel不同的是,你可以从它的属性中找到AutoScroll,并可以设置为True。
补充:
但是实际测试,会有抖动。(原因暂时未知)
参考来源: