HOWTO: Cómo puedo hacer que una Celda (Cell) de un UltraGrid entre en el modo de edición escribiendo cualquier carácter?

Infragistics, Visual Basic 26 marzo, 2015

El UltraGrid (de Infragistics) no entra automáticamente al modo de edición cuando una celda está activa y el usuario presiona una tecla . En su lugar, utiliza su KeyActionMappings para determinar qué acción debe ejecutar basado en la tecla que se presiona. Por defecto, el UltraGrid cambiará el estado de modo de edición cuando se pulsa la tecla F2.

En la mayoria de los casos (dado que estamos acostumbrados por Excel, en mi caso) intuitivamente cuando vemos una celda seleccionada o activa y necesitamos editar el contenido, simplemente empezamos a escribir, cosa que no ocurrirá con un UltraGrid si no presionamos la tecla F2 previamente; para solucionar esto buscando en la red encontré este código que debemos programar en el evento KeyPress del UltraGrid en cuestión:


'The following code assumes that you have added imports statements for the Win and UltraWinGrid namespaces.
'Imports Infragistics.Win
'Imports Infragistics.Win.UltraWinGrid

    Private Sub ultraGrid1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ultraGrid1.KeyPress
        Dim grid As UltraGrid
        Dim activeCell As UltraGridCell

        If TypeOf sender Is UltraGrid Then
            grid = DirectCast(sender, UltraGrid)
        End If

        If Not grid Is Nothing Then
            activeCell = grid.ActiveCell
        End If

        ' if there is an active cell, its not in edit mode and can enter edit mode
        If Not activeCell Is Nothing AndAlso Not activeCell.IsInEditMode AndAlso activeCell.CanEnterEditMode Then
            ' if the character is not a control character
            If Char.IsControl(e.KeyChar) = False Then
                ' try to put cell into edit mode
                grid.PerformAction(UltraGridAction.EnterEditMode)

                ' if this cell is still active and it is in edit mode...
                If grid.ActiveCell Is activeCell AndAlso activeCell.IsInEditMode Then
                    ' get its editor
                    Dim editor As EmbeddableEditorBase = Me.ultraGrid1.ActiveCell.EditorResolved

                    ' if the editor supports selectable text
                    If editor.SupportsSelectableText Then
                        ' select all the text so it can be replaced
                        editor.SelectionStart = 0
                        editor.SelectionLength = editor.TextLength

                        If TypeOf editor Is EditorWithMask Then
                            ' just clear the selected text and let the grid
                            ' forward the keypress to the editor
                            editor.SelectedText = String.Empty
                        Else
                            ' then replace the selected text with the character
                            editor.SelectedText = New String(e.KeyChar, 1)

                            ' mark the event as handled so the grid doesn't process it
                            e.Handled = True
                        End If
                    End If
                End If
            End If
        End If

    End Sub

Deja un comentario