Articles in this section
Category / Section

How to enable column dragging when the ListBoxSelectionMode is set in WinForms GridControl?

2 mins read

Selection mode

By default, when you set the ListBoxSelection mode it disables the dragging of columns. This is by design, since the selection of rows in the ListBoxMode does not allow other types of selections (like selecting columns to drag them).

There are a couple of solutions. When you only want to support the SelectionMode, you can use the technique in the link (highlight-current-row-and-column) to highlight the single row, not using the SelectionMode and still enabling the dragging of columns through the property setting.

When you want to support the other SelectionMode setting, then you can derive the Grid and override the OnMouseDown and OnMouseUp events. You can turn off these ListBoxSelections while you are working with moving columns.

C#

public class mygridcontrol : GridControl
{
   public bool inselections = false;
   protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
   {
      int row, col;
      //get the point of the mouse
      Point pt = this.PointToClient(Control.MousePosition);
      //get the current position
      bool colheader = this.PointToRowCol(pt,out row,out col, -1) && row == 0;
      if (colheader && !inselections)
      {
         this.ListBoxSelectionMode = SelectionMode.None;
      }
      else if (!colheader && inselections)
      {
         this.ListBoxSelectionMode=SelectionMode.MultiSimple;
         inselections = false;
      }
      base.OnMouseDown(e);
   }
   protected override void OnMouseUp(MouseEventArgs e)
   {
      int row, col;
     Point pt = this.PointToClient(Control.MousePosition);
     if (this.PointToRowCol(pt, out row, out col, -1) && row == 0)
     {
        if (!inselections)
           inselections = true;
        else
        {
           this.ListBoxSelectionMode = SelectionMode.MultiSimple;
           inselections = false;
        }
     }
     else
     {
        this.ListBoxSelectionMode = SelectionMode.MultiSimple;
        inselections = false;
     }
     base.OnMouseUp(e);
  }
}

VB

Public Class mygridcontrol Inherits GridControl
   Public inselections As Boolean = False
   Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
      Dim row, col As Integer
      'get the point of the mouse
      Dim pt As Point = Me.PointToClient(Control.MousePosition)
      'get the current position
      Dim colheader As Boolean = Me.PointToRowCol(pt,row,col, -1) AndAlso row = 0
      If colheader AndAlso (Not inselections) Then
         Me.ListBoxSelectionMode = SelectionMode.None
      ElseIf (Not colheader) AndAlso inselections Then
         Me.ListBoxSelectionMode=SelectionMode.MultiSimple
         inselections = False
      End If
      MyBase.OnMouseDown(e)
   End Sub
   Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
       Dim row, col As Integer
       Dim pt As Point = Me.PointToClient(Control.MousePosition)
       If Me.PointToRowCol(pt, row, col, -1) AndAlso row = 0 Then
          If Not inselections Then
             inselections = True
          Else
             Me.ListBoxSelectionMode = SelectionMode.MultiSimple
             inselections = False
          End If
       Else
          Me.ListBoxSelectionMode = SelectionMode.MultiSimple
          inselections = False
       End If
       MyBase.OnMouseUp(e)
    End Sub
End Class

 

Samples:

C#: Column dragging in ListBoxSelectionMode

VB: Column dragging in ListBoxSelectionMode

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please sign in to leave a comment
Access denied
Access denied