Click here to Skip to main content
15,889,462 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Drag and drop with a Datagrid in Windows Forms works perfectly with mouse operation. If I try it with Touch it does not work. Does anyone have any tips on which direction I can look or what I should do?

Thanks for the help


What I have tried:

C#
private void DgvBeschallung_DragDrop(object sender, DragEventArgs e)
{
   // The mouse locations are relative to the screen, so they must be 
   // converted to client coordinates.
   Point clientPoint = DgvBeschallung.PointToClient(new Point(e.X, e.Y));

   // Get the row index of the item the mouse is below. 
   rowIndexOfItemUnderMouseToDrop = DgvBeschallung.HitTest(clientPoint.X, clientPoint.Y).RowIndex;

   if (rowIndexOfItemUnderMouseToDrop > -1)
   {
       // If the drag operation was a move then remove and insert the row.
       if (e.Effect == DragDropEffects.Move)
       {
           DataGridViewRow rowToMove = e.Data.GetData(typeof(DataGridViewRow)) as DataGridViewRow;
           DgvBeschallung.Rows.RemoveAt(rowIndexFromMouseDown);
           DgvBeschallung.Rows.Insert(rowIndexOfItemUnderMouseToDrop, rowToMove);
       }
   }
}

private void DgvBeschallung_DragOver(object sender, DragEventArgs e)
{
   e.Effect = DragDropEffects.Move;
}

private void DgvBeschallung_MouseDown(object sender, MouseEventArgs e)
{
   // Get the index of the item the mouse is below.
   rowIndexFromMouseDown = DgvBeschallung.HitTest(e.X, e.Y).RowIndex;

   if (rowIndexFromMouseDown != -1)
   {
       // Remember the point where the mouse down occurred. 
       // The DragSize indicates the size that the mouse can move 
       // before a drag event should be started.                
       Size dragSize = SystemInformation.DragSize;

       // Create a rectangle using the DragSize, with the mouse position being
       // at the center of the rectangle.
       dragBoxFromMouseDown = new Rectangle(
                 new Point(
                   e.X - (dragSize.Width / 2),
                   e.Y - (dragSize.Height / 2)),
             dragSize);
   }
   else
       // Reset the rectangle if the mouse is not over an item in the ListBox.
       dragBoxFromMouseDown = Rectangle.Empty;
}

private void DgvBeschallung_MouseMove(object sender, MouseEventArgs e)
{
   if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
   {
       // If the mouse moves outside the rectangle, start the drag.
       if (dragBoxFromMouseDown != Rectangle.Empty &&
       !dragBoxFromMouseDown.Contains(e.X, e.Y))
       {
           // Proceed with the drag and drop, passing in the list item.                    
           DragDropEffects dropEffect = DgvBeschallung.DoDragDrop(
                 DgvBeschallung.Rows[rowIndexFromMouseDown],
                 DragDropEffects.Move);
       }
   }
}
Posted
Updated 16-Apr-20 6:18am

1 solution

Hi Alexandra,

you can use the Mouse events to work it on touchscreen as touch events would be treated as mouse event internally.


Regards,
Sharmanuj
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900