如何按Enter键使焦点移动到下面的单元格,就像Excel的默认行为一样?

Bla*_*hor 2 infragistics ultrawingrid onkeypress

我使用的是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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我希望这可以使单元格位于同一列但下面一行成为调用的活动单元格grid.Rows [currentRow + 1] .Cells [grid.ActiveCell] .Activate();

而是抛出异常:

Infragistics2.Shared.v9.1.dll中出现类型'System.IndexOutOfRangeException'的例外但未在用户代码中处理附加信息:索引超出了数组的范围.

由于我在第0行并且存在第1行,这对我来说是一个惊喜.currentRow和col的值分别为0和28.什么是更好的方法?顺便说一句,我可以在下面的单元格中再次执行此操作,其中值为currentRow = 1和col = 28.抛出相同的异常.

Bla*_*hor 6

有人回答了关于Infragistics论坛的问题......

    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);
        }
    }
Run Code Online (Sandbox Code Playgroud)