void _vScrollBar_ValueChanged(object sender, EventArgs e) { //这里判断的原因是可能在 _vScrollBar_Scroll 事件里就赋值过了 if (_itemsAreaOffset != _vScrollBar.Value) { _itemsAreaOffset = _vScrollBar.Value; } _imageListView.SuspendLayout(); if (MouseSelecting) { //如果处于框选状态,在重新绘制控件之前需要计算新的 SelectionRectangle //因为SelectionRectangle一开始是在MouseMove中计算的,而当鼠标拉出控件边界时 //滚动条会继续滚动,如果此时保持鼠标不动,就要靠这里计算 SelectionRectangle 了 SelectionRectangle = CreateSelectionRectangle(); SelectItemsByRectangle(SelectionRectangle); } _imageListView.ResumeLayout(true); CalculateVisibleItemsRange(); }