Come faccio a fare la pressione del tasto Invio causare la messa a fuoco sulla cella sottostante come il comportamento predefinito di Excel?
-
20-09-2019 - |
Domanda
Sto usando un ultrawingrid infragistico v9.1. Voglio consentire all'utente di inserire dati numerici in una cella, premere accedere E poi focalizzati sulla cella sottostante, come vedi in Excel. Sembra che l'evento Keyup potrebbe essere migliore dell'evento chiave per questo, ma continuo a lanciare un'eccezione che ho superato i limiti della UltrawingRid anche se inizio in cima a una griglia completa. Ecco il codice che ho provato:
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();
}
}
Mi aspettavo che questo facesse la cella nella stessa colonna, ma una riga sotto per diventare la cella attiva con la chiamata, griglia.rows [CurrentRow + 1] .Cells [Grid.ActiveCell] .Activate ();
Invece viene lanciata un'eccezione:
Un'eccezione del tipo 'System.indexoutoFrangeException' si è verificata in Infragistics2.Shared.v9.1.dll ma non è stata gestita nel codice utente Informazioni aggiuntive: l'indice era al di fuori dei limiti dell'array.
Dato che sono sulla riga 0 ed esiste una riga 1 questa è una sorpresa per me. I valori per CurrentRow e Col sono rispettivamente 0 e 28. Quale sarebbe un approccio migliore? BTW posso farlo di nuovo la cella sottostante, in cui i valori sono CurrentWrow = 1 e Col = 28. Viene lanciata la stessa eccezione.
Soluzione
Qualcuno ha risposto alla mia domanda sulle infragistiche ...
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);
}
}
Altri suggerimenti
Non so se quello che sto dicendo sia valido anche per il v9.1 ma puoi anche fare qualcosa del genere:
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);
}
}
Dopo aver usato grid.PerformAction(UltraGridAction.BelowCell)
, La riga attiva cambierà ma la cella successiva non è in modalità di modifica.