当用户点击小键盘Enter键时,如何发送单个Downkey键?

时间:2011-05-23 04:14:03

标签: c# .net winforms datagridview key

这纯粹是出于我的客户问我的可用性要求。

他们使用datagridview为学生输入成绩。因此他们几乎进入僵尸模式并开始使用数字,他们告诉我,如果他们可以点击小键盘输入键以使下一个垂直选择聚焦,那会更容易。

以下是我尝试使用的内容:

private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        SendKeys.Send("{DOWN}");
    }
}

不幸的是,它没有按预期工作。有时它似乎会多次触发该键,导致焦点向下滚动2或3或4个单元格并真正震动用户的注意力。

如何让这项工作让客户满意?

5 个答案:

答案 0 :(得分:1)

private void datagridView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        bindingsource.MoveNext();
    }
}

答案 1 :(得分:1)

试试这个 - 我测试了它并且它有效。

private void datagridView12_KeyDown(object sender, KeyEventArgs e) 
{ 
     if (e.KeyCode == Keys.Enter) 
     {
         int col = dataGridView12.CurrentCell.ColumnIndex;
         int row = dataGridView12.CurrentCell.RowIndex;
         if (row != dataGridView12.NewRowIndex)
         {
             if (col == (dataGridView12.Columns.Count - 1))
             {
                 col = -1;
                 row++;
             }

             dataGridView12.CurrentCell = dataGridView12[col, row + 1];
         }

         e.Handled = true;
         base.OnKeyDown(e);
     } 
}

答案 2 :(得分:0)

您可以使用在keyDown上设置为true的布尔值,并在keyUp上设置为false。

仅当布尔值为true时才运行sendKeys.Send。这应确保每次按键时只触发一次事件。

这通常是我在其他语言中看到的,我不确定是否有更好的方法在C#中完成。

答案 3 :(得分:0)

当您在DataGridView中按 Enter 键时(无论是否处于编辑模式),默认情况下会关闭一个单元格(在.NET framework 3.5和4.0中)。

首先不是你需要的功能吗?

答案 4 :(得分:-1)

当用户按下回车键时,您是否可以将焦点设置在下一个文本框中? 您可以使用TextBox.Focus()方法移动下一个文本框。