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

时间:2010-02-11 21:50:09

标签: infragistics ultragrid onkeypress ultrawingrid

我使用的是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 个答案:

答案 0 :(得分: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);
        }
    }

答案 1 :(得分:2)

我不知道我所说的对v9.1是否也有效,但你也可以这样做:

yourGrid.KeyActionMappings.Add(new GridKeyActionMapping(Keys.Enter, UltraGridAction.BelowCell, 0, UltraGridState.Row, SpecialKeys.All, 0));

答案 2 :(得分:1)

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

答案 3 :(得分:0)

使用grid.PerformAction(UltraGridAction.BelowCell)后,活动行将更改,但下一个单元格不处于编辑模式。