¿Cómo hago que presionar la tecla ENTER cause que el enfoque se mueva a la celda a continuación como el comportamiento predeterminado de Excel?

StackOverflow https://stackoverflow.com/questions/2247979

Pregunta

Estoy usando una infragística Ultrawingrid V9.1. Quiero permitir que el usuario ingrese datos numéricos en una celda, presione Ingresar Y luego centrarse en la celda a continuación, como se ve en Excel. Parece que el evento KeyUp podría ser mejor que el evento clave para esto, pero sigo lanzando una excepción de que he ido más allá de los límites del Ultrawingrid a pesar de que comienzo en la parte superior de una cuadrícula completa. Aquí está el código que he probado:

    private void ugrid_KeyUp(object sender, KeyEventArgs e)
    {
        UltraGrid grid = (UltraGrid)sender;

        if (e.KeyCode == Keys.Enter)
        {
            // Go down one row
            UltraGridCell cell = grid.ActiveCell;
            int currentRow = grid.ActiveRow.Index;
            int col = cell.Column.Index;
            grid.Rows[currentRow + 1].Cells[grid.ActiveCell].Activate();
        }
    }

Esperaba que esto hiciera la celda en la misma columna, pero una fila a continuación se convirtió en la celda activa con la llamada, Grid.rows [CurrentRow + 1] .Cells [Grid.activecell] .Activate ();

En cambio, se lanza una excepción:

Una excepción del tipo 'System.IndexoUtoFrangeException' ocurrió en infragistics2.shared.v9.1.dll pero no se manejó en el código de usuario información adicional: el índice estaba fuera de los límites de la matriz.

Como estoy en la fila 0 y existe una fila 1, esta es una sorpresa para mí. Los valores para CurrentRow y Col son 0 y 28 respectivamente. ¿Cuál sería un mejor enfoque? Por cierto, puedo hacer esto nuevamente la celda a continuación, donde los valores son CurrentRow = 1 y Col = 28. Se lanza la misma excepción.

¿Fue útil?

Solución

Alguien respondió a mi pregunta sobre las infragísticas por una ...

    private void ugrid_KeyUp(object sender, KeyEventArgs e)
    {
        var grid = (UltraGrid)sender;

        if (e.KeyCode == Keys.Enter)
        {
            // Go down one row
            grid.PerformAction(UltraGridAction.BelowCell);
        }
    }

Otros consejos

No sé si lo que digo es válido también para el V9.1, pero también puedes hacer algo como esto:

yourGrid.KeyActionMappings.Add(new GridKeyActionMapping(Keys.Enter, UltraGridAction.BelowCell, 0, UltraGridState.Row, SpecialKeys.All, 0));
 private void ulGrvProducts_KeyUp(object sender, KeyEventArgs e)
        {

            UltraGrid grid =  (UltraGrid)sender;

            if (e.KeyCode == Keys.Enter)
            {
                 //Go down one row
                grid.PerformAction(UltraGridAction.BelowCell);
            }
        }

Después de usar grid.PerformAction(UltraGridAction.BelowCell) , Active Row cambiará pero la siguiente celda no está en modo de edición.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top