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?
-
20-09-2019 - |
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.
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.