You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataGridView单元格编辑时禁用导航键,实现下箭头聚焦ListBox

解决方案

要解决这个问题,核心是拦截单元格编辑控件的按键事件——因为当单元格处于编辑状态时,按键事件会先被内部的编辑控件(比如TextBox)捕获,你直接绑定DataGridView的KeyDown事件根本不会触发。

以下是可行的实现步骤:

  1. 监听DataGridView的EditingControlShowing事件,在单元格进入编辑状态时,获取编辑控件并绑定按键事件:
private void dgvHP_OPDPrescriptionDiagnosis_Detail____EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    // 先移除原有绑定避免重复触发,再绑定新的KeyDown事件
    if (e.Control is TextBox editTextBox)
    {
        editTextBox.KeyDown -= EditTextBox_KeyDown;
        editTextBox.KeyDown += EditTextBox_KeyDown;
    }
}
  1. 在编辑控件的KeyDown事件中处理向下箭头的逻辑:
private void EditTextBox_KeyDown(object sender, KeyEventArgs e)
{
    // 仅当建议ListBox可见时处理
    if (listBoxSuggestions.Visible && e.KeyCode == Keys.Down)
    {
        // 取消默认的单元格跳转行为
        e.Handled = true;
        e.SuppressKeyPress = true;
        
        // 将焦点移到ListBox第一项并高亮
        if (listBoxSuggestions.Items.Count > 0)
        {
            listBoxSuggestions.SelectedIndex = 0;
            listBoxSuggestions.Focus();
        }
    }
}
  1. 可选补充:给ListBox添加按键逻辑,支持回车选中回填、ESC关闭列表:
private void listBoxSuggestions_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter && listBoxSuggestions.SelectedItem != null)
    {
        // 将选中的建议回填到当前单元格
        dgvHP_OPDPrescriptionDiagnosis_Detail____CurrentCell.Value = listBoxSuggestions.SelectedItem.ToString();
        // 关闭列表并结束编辑
        listBoxSuggestions.Visible = false;
        dgvHP_OPDPrescriptionDiagnosis_Detail____EndEdit();
        e.Handled = true;
    }
    else if (e.KeyCode == Keys.Escape)
    {
        // 按ESC关闭列表,保留单元格原有内容
        listBoxSuggestions.Visible = false;
        e.Handled = true;
    }
}

关键说明

  • 每次单元格进入编辑状态都会生成新的编辑控件实例,所以必须在EditingControlShowing事件中动态绑定事件,不能提前绑定。
  • 先判断ListBox可见性,避免在无建议列表时误处理按键。
  • 调用listBoxSuggestions.Focus()确保焦点真正切换到列表,同时设置SelectedIndex让第一项高亮。

内容的提问来源于stack exchange,提问作者Shaiwal Tripathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:40:39