Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / desktop / WinForms

Apps Key in DevExpress GridControl

0.00/5 (No votes)
29 Jun 2011CPOL1 min read 24.6K   327  
Display of a context menu when pressing the Apps key in a DevExpress GridControl

This article appears in the Third Party Products and Tools section. Articles in this section are for the members only and must not be used to promote or advertise products in any way, shape or form. Please report any spam or advertising.

Apps key in DevExpress GridControl

Introduction

In Windows, context menus are displayed either by right-clicking on the mouse, or by pressing the Apps key on the keyboard. This post describes how to implement the same functionality on a DevExpress GridControl.

Background

The Apps key is usually to the left of the right Ctrl button on the keyboard.

Using the Code

Compile the project and run it. Set in the Input folder field a folder which contains some files. When pressing the Get files button, the grid is populated with the list of files of that folder. When pressing the Apps key on a selected row, the context menu appears. The context menu is displayed by the code:

VB.NET
Public Delegate Sub ContextMenuShow(ByVal v As GridView, ByVal pt As System.Drawing.Point)

Protected Overridable Sub ContextGridMenuShow_
	(ByVal v As GridView, ByVal pt As System.Drawing.Point)
    ContextMenuStrip1.Show(v.GridControl, pt)
End Sub

Private Shared Sub View_KeyDown( _
    ByVal v As GridView, ByVal e As KeyEventArgs, ByVal f As ContextMenuShow)
    If e.KeyCode = Keys.Apps Then
        If v.FocusedRowHandle > -1 Then
            Dim col As DevExpress.XtraGrid.Columns.GridColumn = v.FocusedColumn
            Dim gvi As ViewInfo.GridViewInfo = col.View.GetViewInfo()
            Dim rvi As ViewInfo.GridDataRowInfo = _
            gvi.RowsInfo(v.FocusedRowHandle - gvi.RowsLoadInfo.TopVisibleRowIndex)
            Dim i As Integer = _
            IIf(col.VisibleIndex < rvi.Cells.Count - 1, col.VisibleIndex + 1, 1)
            Dim rect As System.Drawing.Rectangle = rvi.Cells(i).Bounds
            If Not rect.IsEmpty Then
                Dim pt As System.Drawing.Point = rect.Location : pt.Offset(20, 10)
                f(v, pt)
            End If
        End If
    End If
End Sub

Protected Overridable Sub GridView1_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) Handles GridView1.KeyDown
    If e.KeyCode = Keys.Enter Then
        ShowEditForm()
    End If
    View_KeyDown(sender, e, AddressOf ContextGridMenuShow)
End Sub

The View_KeyDown method checks if the Apps key was pressed. If it was, and a row on the grid is focused, it gets the focused column. The visible row is retrieved through v.FocusedRowHandle - gvi.RowsLoadInfo.TopVisibleRowIndex, because the grid may have been scrolled. The cell next to the focused column is taken, or the second cell is taken if the focused column is larger than the displayed columns. For this cell, the bounds are taken and a point with an offset of 20 and 10 from the upper left corner is taken. For that point, a function is called that displays the context menu at that point (ContextGridMenuShow).

Points of Interest

This project also shows how a detail form may be displayed when double-clicking or pressing Enter on a row.

History

  • 28th June, 2011: Initial post

License

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