Clicking on a Datagrid row, with the Right Mouse Button,does not automatically select the clicked row. How can I select the row in a Datagrid that the user clicks with the Right Mouse Button?
Clicking on a row in a Windows Forms Datagrid Row Header, with the Left mouse button, will automatically select the row, but clicking with the right mouse button will not select the row. This can cause confusion and unwanted action by your application if the user is not aware of such action. Additionally, you don't want the user to have to click first with the Left mouse button and then click with the Right mouse button in order to load a context menu.
There is a simple solution that I will describe in this article. First, the code shown below is the MouseUp Event for the Datagrid. If the user clicks on a row header, the event calls the SelectCkBoxRow to select the clicked row. If you want to select the row, regardless of where they click on the row, just remove the test for the "hti.Type = DataGrid.HitTestType.RowHeader".
| Private miHitRow As Integer Private Sub dbgEquipment_MouseUp(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles dbgEquipment.MouseUp If e.Button = MouseButtons.Right Then If hti.Type = DataGrid.HitTestType.RowHeader Then miHitRow = SelectCkBoxRow(Me.dbgEquipment, e) End If End If End Sub |
| Public Overloads Function SelectCkBoxRow(ByRef dbg As DataGrid, _ ByVal e As System.Windows.Forms.MouseEventArgs) As Integer Dim retval As Integer Try Dim pt = New Point(e.X, e.Y) Dim hti As DataGrid.HitTestInfo = dbg.HitTest(pt) dbg.Select(hti.Row) Return hti.Row Catch ex As System.Exception End Try End Function |
| private int miHitRow; private void dbgEquipment_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { DataGrid.HitTestInfo hti; hti=dbgEquipment.HitTest(e.X,e.Y); if(e.Button == MouseButtons.Right) { if(hti.Type==DataGrid.HitTestType.RowHeader) miHitRow = SelectCkBoxRow(ref thisdbgEquipment, e); } } private int SelectCkBoxRow(ref DataGrid dbg, System.Windows.Forms.MouseEventArgs e) { Point pt = new Point(e.X,e.Y); DataGrid.HitTestInfo hti = dbg.HitTest(pt); dbg.Select(hti.Row); return(hti.Row); } |