【问题标题】:How can I send a single Downkey key when my user taps the numpad Enter key?当我的用户点击小键盘 Enter 键时,如何发送单个 Downkey 键?
【发布时间】:2011-08-30 20:51:09
【问题描述】:

这纯粹是针对我的客户向我提出的可用性要求。

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

这是我尝试使用的:

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

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

我怎样才能完成这项工作并让我的客户满意?

【问题讨论】:

  • 你考虑过文本字段数组吗?
  • 尝试在您的 SendKeys.Send 之后添加一个 e.handled=true
  • 他们使用的程序是否有您可以访问的源代码?如果是这样,为什么不直接接受回车键并使用它 - 否则我认为您需要一个 IntPtr 句柄到他们的窗口并专门发送到该窗口。
  • @Chuck:我不确定你的意思,在 datagridview 单元格中按回车键不会垂直向下滚动。
  • 你不能只取下一行,选择它然后在单元格上执行 EnsureVisible() 吗?

标签: c# .net winforms datagridview key


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这是一个datagridview,与文本框无关。
    【解决方案3】:
    private void datagridView1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            bindingsource.MoveNext();
        }
    }
    

    【讨论】:

      【解决方案4】:

      试试这个 - 我已经测试过了,它可以工作。

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

      【讨论】:

        【解决方案5】:

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

        这不是您最开始需要的功能吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-24
          • 2011-08-08
          • 1970-01-01
          • 1970-01-01
          • 2019-11-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多