#region 调用系统方法,是容器内的所有控件随滚动条移动
private void SetControlsScroll(int horizontalvalue,int verticalvalue)
{
var flags = BindingFlags.NonPublic | BindingFlags.Instance;
var field = typeof(ScrollableControl).GetField("displayRect", flags);
var rect = (Rectangle)field.GetValue(this);
Rectangle cr = this.ClientRectangle;
RECT rcClip = RECT.FromXYWH(cr.X, cr.Y, cr.Width, cr.Height);
RECT rcUpdate = RECT.FromXYWH(cr.X, cr.Y, cr.Width, cr.Height);
var xDelta = -horizontalValue - rect.X;
var yDelta = -verticalvalue - rect.Y;
//var yDelta = -rect.Y;
rect.X = -horizontalValue;
rect.Y = -verticalvalue;
//rect.Y = 0;
field.SetValue(this, rect);
int SW_SCROLLCHILDREN = 0x0001;
int SW_INVALIDATE = 0x0002;
int SW_ERASE = 0x0004;
ScrollWindowEx(new HandleRef(this, Handle), xDelta, yDelta,
null,
ref rcClip,
new HandleRef(),
ref rcUpdate,
SW_INVALIDATE
| SW_ERASE
| SW_SCROLLCHILDREN);
}
#endregion
相关资料:
http://msdn.microsoft.com/zh-cn/library/dwbfte93.aspx