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

DataGridView单元格编辑时如何检测方向键

DataGridView编辑单元格时捕获方向键的解决方案

问题核心是DataGridView会优先处理方向键的焦点切换行为,导致编辑控件的KeyDown事件无法响应。可以通过以下两步解决:

  • 绑定事件前先移除原有事件绑定,避免重复触发逻辑
  • 在KeyDown事件中处理完自定义逻辑后,设置e.Handled = true,阻止DataGridView执行默认的焦点切换行为

修改后的代码如下:

private void dgvHP_OPDPrescriptionDiagnosis_Detail____EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    switch (dgvHP_OPDPrescriptionDiagnosis_Detail___.CurrentCell.ColumnIndex)
    {
        case 9:
            TextBox txtDiagnosis = e.Control as TextBox;
            if (txtDiagnosis != null)
            {
                // 先移除旧的事件绑定,防止重复触发
                txtDiagnosis.KeyDown -= DiagnosisKeyDown;
                // 绑定新的事件
                txtDiagnosis.KeyDown += DiagnosisKeyDown;
            }
            break;
    }
}

private void DiagnosisKeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyData == Keys.Down)
    {
        MessageBox.Show("Hi");
        // 标记事件已处理,阻止DataGridView执行默认的焦点切换
        e.Handled = true;
    }
}

如果需要兼顾文本框内的光标移动逻辑,可以额外判断文本框的光标位置或滚动状态,比如当文本框内容未完全显示、光标可继续移动时,保留默认行为,否则再执行自定义逻辑。

内容的提问来源于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.22 22:30:56