Comment puis-je faire en sorte que la mise au point de la touche Entrée se déplace vers la cellule ci-dessous comme le comportement par défaut d'Excel?

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

Question

J'utilise un infragistique ultrawingrid v9.1. Je souhaite permettre à l'utilisateur d'entrer des données numériques dans une cellule, appuyez sur Entrer Et puis mettez l'accent sur la cellule ci-dessous, comme vous le voyez dans Excel. Il semble que l'événement de Keyup pourrait être meilleur que l'événement de touche de touche pour cela, mais je continue à lancer une exception que je suis allé au-delà des limites de l'Ultrawingrid même si je commence au sommet d'une grille complète. Voici le code que j'ai essayé:

    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();
        }
    }

Je m'attendais à ce que cela fasse la cellule dans la même colonne, mais une ligne ci-dessous pour devenir la cellule active avec l'appel, grid.Rows [currentrow + 1] .Cells [grid.activecell] .activate ();

Au lieu de cela, une exception est lancée:

Une exception du type 'System.IndexoutOfRangeException' s'est produite dans infragistics2.shared.v9.1.dll mais n'a pas été gérée dans le code utilisateur Informations supplémentaires: l'index était en dehors des limites du tableau.

Depuis que je suis sur la ligne 0 et il existe une ligne 1, c'est une surprise pour moi. Les valeurs pour Currentrow et Col sont respectivement de 0 et 28. Quelle serait une meilleure approche? btw je peux refaire cela la cellule ci-dessous, où les valeurs sont currentrow = 1 et col = 28. La même exception est lancée.

Était-ce utile?

La solution

Quelqu'un a répondu à ma question sur les forums infragistiques ...

    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);
        }
    }

Autres conseils

Je ne sais pas si ce que je dis est également valable pour le V9.1, mais vous pouvez aussi faire quelque chose comme ceci:

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);
            }
        }

Après avoir utilisé grid.PerformAction(UltraGridAction.BelowCell) , la ligne active changera mais la prochaine cellule n'est pas en mode édition.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top