在拖动时滚动flowlayoutpanel?

时间:2012-09-06 19:15:56

标签: c# .net winforms scroll flowlayoutpanel

我有一个Windows窗体应用程序,它使用FlowLayoutPanel控件来显示动态构建的图片框。我已经启用了拖放效果,因为他们可能想要重新排序它们,这只适用于几个图片框(现在屏幕显示大约6个)但是如果有更多你试图拖动控件下面的项目它不会滚动,因此您无法将当前在屏幕上的图像(例如图像4)放在低于可见的图像(例如图像13)。

我已经看过应该使用ScrollControllIntoViewMethod的几个帖子,我在几个地方尝试过不成功。

谢谢!

1 个答案:

答案 0 :(得分:2)

这是我最终做的事。

在DragLeave事件上创建事件
获得控制的位置
计算控件的高度以获得下边界。
检查鼠标位置,如果在界限之上,则用常量值中的值更改垂直滚动(或水平滚动)。

private void thumbFlow_DragLeave(object sender, EventArgs e)
{
    int BegY_ThumbFlow = this.thumbFlow.FindForm().PointToClient(this.thumbFlow.Parent.PointToScreen(this.thumbFlow.Location)).Y;
    int thumbFlowBound_Y = this.thumbFlow.Height + BegY_ThumbFlow;
    int mouseY = this.thumbFlow.FindForm().PointToClient(MousePosition).Y;

    while (mouseY >= thumbFlowBound_Y)
    {
        thumbFlow.VerticalScroll.Value = thumbFlow.VerticalScroll.Value + DRAG_DROP_SCROLL_AMT;
        mouseY = thumbFlow.FindForm().PointToClient(MousePosition).Y;
        thumbFlow.Refresh();
    }

    while (mouseY <= BegY_ThumbFlow)
    {
        thumbFlow.VerticalScroll.Value = thumbFlow.VerticalScroll.Value - DRAG_DROP_SCROLL_AMT;
        mouseY = thumbFlow.FindForm().PointToClient(MousePosition).Y;
        thumbFlow.Refresh();
    }
}

希望这有助于其他人。