Como faço para fazer pressionar a tecla Enter, porque o foco se move para a célula abaixo, como o comportamento padrão do Excel?

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

Pergunta

Estou usando uma infragística Ultrawingrid v9.1. Quero permitir que o usuário insira dados numéricos em uma célula, pressione Digitar E então tenha o foco na célula abaixo, como você vê no Excel. Parece que o evento KeyUp pode ser melhor do que o evento teclado para isso, mas continuo lançando uma exceção de que fui além dos limites do Ultrawingrid, mesmo que eu comece no topo de uma grade completa. Aqui está o código que eu tentei:

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

Eu esperava que isso fizesse a célula na mesma coluna, mas uma linha abaixo para se tornar a célula ativa com a chamada, grid.rows [currentrow + 1] .Cells [grid.activeCell] .Activate ();

Em vez disso, uma exceção é lançada:

Uma exceção do tipo 'System.IndexoutOfRangeException' ocorreu em infragística2.shared.v9.1.dll, mas não foi tratado no código do usuário informações adicionais: o índice estava fora dos limites da matriz.

Como estou na linha 0 e existe uma linha 1, isso é uma surpresa para mim. Os valores para CurrentRow e Col são 0 e 28, respectivamente. Qual seria uma abordagem melhor? BTW, posso fazer isso novamente a célula abaixo, onde os valores são CurrentRow = 1 e Col = 28. A mesma exceção é lançada.

Foi útil?

Solução

Alguém respondeu minha pergunta nos fóruns infragísticos ...

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

Outras dicas

Não sei se o que estou dizendo é válido também para a v9.1, mas você também pode fazer algo assim:

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

Depois de usar grid.PerformAction(UltraGridAction.BelowCell) , a linha ativa mudará, mas a próxima célula não está no modo de edição.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top