Как сделать, чтобы при нажатии клавиши Enter фокус переместился в ячейку ниже, как в Excel по умолчанию? - PullRequest
2 голосов
/ 12 февраля 2010

Я использую Infragistics UltraWinGrid v9.1. Я хочу, чтобы пользователь мог вводить числовые данные в ячейку, нажмите Enter и затем сфокусируйтесь на ячейке ниже, как вы видите в Excel. Похоже, что событие KeyUp может быть лучше, чем событие KeyPressed для этого, но я продолжаю выдавать исключение, что я вышел за пределы 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. Выдается то же исключение.

Ответы [ 4 ]

6 голосов
/ 15 февраля 2010

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

    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);
        }
    }
2 голосов
/ 20 февраля 2012

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

1 голос
/ 22 ноября 2012
 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);
            }
        }
0 голосов
/ 18 апреля 2013

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

...