Hello All!
I am currently implementing a drag and drop feature to reorder a set of user controls that I have put in a flow layout panel. I've turned off wrapping and the flow direction is from top to bottom. Here's how I've implemented the drag and drop feature itself:
UserControl_MouseDown event:
1) Get the mouse offset from the upper left corner of the UserControl
2) Remove the control being dragged from the FlowLayoutPanel and put it in the form
3) Calculate the rectangle relative to the form of the FlowLayoutPanel
UserControl_MouseMove event:
1) Using the mouse offset of the UserControl, figure out the UserControl's new location on the form
2) if that location is outside of the FlowLayoutPanel's rectangle, change the calculation to move it to the edge of the FlowLayoutPanel
3) Move the UserControl
UserControl_MouseUp event:
1) Find the underDrop control (the UserControl under the UserControl that's being dragged)
2) Figure out if the dragging UserControl should go above or below underDrop
3) Add the dragging UserControl to the FlowLayoutPanel and set it's index.
This is working beautifully! It reorders just fine.
My issue is when there are more controls than will fit in the visible area. I have AutoScroll set to True, so the scroll bar turns on. When I drag a control to the bottom I turn on a timer that periodically adjusts FlowLayoutPanel.VerticalScroll.Value depending on if the UserControl is at the top of the FlowLayoutPanel or the bottom.
When I move my mouse left or right, the UserControl (who's parent is the form) still gets moved left or right. When this happens, FlowLayoutPanel.VerticalScroll.Value is reset to what it was before I started adjusting the scroll. On top of that, even if I'm careful to move the mouse only up or down back inside the FlowLayoutPanel's rectangle, when the UserControl gets moved, FlowLayoutPanel.VerticalScroll.Value is reset again, so I can't drop it where I want to.
Does anybody have any idea why move a control over the FlowLayoutPanel would reset the VerticalScrol.Value? Is there a way to stop this? Is there a better way to scroll inside a FlowLayoutPanel?
Thanks for any help!
-Hazelrah