Как сделать нажатие на нажатие клавиши Enter, чтобы переместиться в ячейку ниже, как поведение Excel по умолчанию?

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

Вопрос

Я использую инфрагистический ультравингрид v9.1. Я хочу позволить пользователю вводить числовые данные в ячейку, нажмите Войти А затем сосредоточитесь на ячейке ниже, как вы видите в Excel. Похоже, что событие Keyup может быть лучше, чем для этого важного события, но я продолжаю выпускать исключение, которое я вышел за пределы UltrawingRid, хотя я начинаю на вершине полной сетки. Вот код, который я пробовал:

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

Я ожидал, что это сделает ячейку в том же столбце, но в одну строку ниже, чтобы стать активной ячейкой с вызовом, Grid.Rows [CurrentRow + 1] .cells [Grid.ActiveCell] .Activate ();

Вместо этого брошено исключение:

Исключение типа 'System.indexoutofrangeException' произошло в Infragistics2.shared.v9.1.dll, но не обрабатывалась в коде пользователя. Дополнительная информация: индекс находился за пределами массива.

Поскольку я в ряду 0, и существует ряд 1, это для меня сюрприз. Значения для Currentrow и Col составляют 0 и 28 соответственно. Что будет лучшим подходом? Кстати, я могу сделать это снова с ячейкой ниже, где значения являются currentrow = 1 и col = 28. То же исключение брошено.

Это было полезно?

Решение

Кто -то ответил на мой вопрос на инфрагистическом форуме ...

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

Другие советы

Я не знаю, действительно ли то, что я говорю, также для v9.1, но вы также можете сделать что -то вроде этого:

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

После использования grid.PerformAction(UltraGridAction.BelowCell) , Active Row изменится, но следующая ячейка не будет в режиме редактирования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top