the Drag() api doesn't suit controls outside the scope of the control that the drag is assigned to. Nor do I believe it acts as expected.
The drag() documentation says the arguments are, The X coordinate of the start position The Y coordinate of the start position The X coordinate of the end position. The Y coordinate of the end position.
It doesn't say that that the end is relative to the start. So if my start is x:1000 y :50 and my end is x:500 y:50 the arguments that would make the Drag() work would have to be IControl.Drag(1000,50,-500,0) and not Drag(1000,50,500,50).
I have a modal screen that contains 2 grids. I have to drag a row in one grid to a row in another grid. I'm able to filter both grid's results so that the rows I want have the same y co-ordinate, thereby making destination y=0 as outlined above. The row width is static so I can make the destination x = -500.The quickest solution i came up with (which is hideous),
1. Write a native method to get x,y of Cursor position [user32.dll, GetCursorPos(out point)]
2. Click a cell in 1st grid (row that I want). Don't need to get destination grid x:y because I'm using relative values as explained. Use native method to get source x:y.
3. Call Drag() on modal form, not either of the grids. This is because the x:y may be out of bounds on grids. I also call form.Position(0,0,form.Width,form.Height) before step 2 so that poistion is consitent.