Come faccio a fare la pressione del tasto Invio causare la messa a fuoco sulla cella sottostante come il comportamento predefinito di Excel?

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

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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top