关于VScrollBar控制FlowLayoutPanel的滚动

认知尚浅,如有错误,愿闻其详!

概述

  最近在做自定义控件的时候,为了解决一个问题:使用一个外部ScrollBar去控制一个具有滚动效果的控件滚动。如下:


关于VScrollBar控制FlowLayoutPanel的滚动_第1张图片
滑条控制带滑条的FlowLayoutPanel滚动.png

(也不晓得我咋来的骚操作)
后来源于对控件属性不太了解,走了很多弯路。想过用VScrollBar去控制控制控件滚动幅度,没能做出来,后来想着直接去控制控件的滑条,也就有了下面的方法。

解决

首先我们了解Scroll的两个属性,LargeChangeSmallChange,如下,微软文档的解释:

关于VScrollBar控制FlowLayoutPanel的滚动_第2张图片
LargeChange And SmallChange.png

实现

      //首先需要修改一下flowLayoutPanel的高度,这样才能回去并赋值以下参数,
      flowLayoutPanel.Height = panel.Height;
      //通过外部VScrollBar 的Maximum 、SmallChange、LargeChange 
      //与控件的Scroll控件的相应参数值一致
      scrollControl.Maximum = flowLayoutPanel.VerticalScroll.Maximum;
      scrollControl.SmallChange = flowLayoutPanel.VerticalScroll.SmallChange;
      scrollControl.LargeChange = flowLayoutPanel.VerticalScroll.LargeChange;

这样就实现了,不过其中也会有BUG,就是通过将外部VScrollBar的Value赋值给控件的Scroll的Value时,会出现第一次VScrollBar的Value = 10,赋值给控件的Scroll时却没赋上,下一次再赋值才会赋值上,但是界面却滚动了,很迷。

效果

关于VScrollBar控制FlowLayoutPanel的滚动_第3张图片
实现控制.gif

你可能感兴趣的:(关于VScrollBar控制FlowLayoutPanel的滚动)