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

C# DataGridView设置CurrentCell为编辑模式失败求助

解决方案

你的问题核心在于回车的默认行为干扰了编辑模式的触发,加上事件绑定逻辑的重复触发和调用时机不当,导致BeginEdit(true)无法生效。以下是针对性的修复步骤和代码:

1. 移除不必要的CurrentCellChanged事件处理

该事件会在每次单元格切换时触发,打乱自定义的编辑流程,直接删除这个事件的绑定和实现:

// 删除此事件处理方法
// private void DGV_score_CurrentCellChanged(object sender, EventArgs e)
// {
//     DGV_score.BeginEdit(true);
// }

2. 修正PreviewKeyDown事件逻辑

修改回车处理逻辑,阻止默认行为并延迟触发编辑模式:

private void DGV_score_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.KeyData == Keys.Enter)
    {
        // 标记为输入键,阻止DataGridView默认的回车行为(如自动移动单元格)
        e.IsInputKey = true;
        
        if (DGV_score.CurrentRow.Index == maxrow)
        {
            DGV_score.Rows.Add();
            maxrow++;
            
            DataGridViewCell targetCell = leg % 2 != 0 
                ? DGV_score.Rows[maxrow].Cells[0] 
                : DGV_score.Rows[maxrow].Cells[2];
            
            DGV_score.CurrentCell = targetCell;
            
            // 使用BeginInvoke延迟执行,确保DataGridView完成新行渲染后再进入编辑模式
            DGV_score.BeginInvoke(new Action(() =>
            {
                if (DGV_score.CurrentCell == targetCell)
                {
                    DGV_score.BeginEdit(true);
                }
            }));
        }
    }
}

3. 优化EditingControlShowing的事件绑定

避免重复绑定事件导致逻辑多次触发:

private void DGV_score_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control is DataGridViewTextBoxEditingControl tb)
    {
        // 通过Tag标记避免重复绑定事件
        if (tb.Tag == null)
        {
            tb.KeyDown += DGV_score_KeyDown;
            tb.PreviewKeyDown += DGV_score_PreviewKeyDown;
            tb.Tag = true;
        }
    } 
}

关键修复说明

  • e.IsInputKey = true:阻止DataGridView对回车的默认处理(比如自动切换到下一个单元格),确保自定义逻辑完全掌控焦点和编辑状态。
  • BeginInvoke:刚添加新行并设置CurrentCell后,DataGridView内部还在处理控件布局和焦点同步,延迟调用BeginEdit能确保控件状态稳定后触发编辑模式。
  • 事件绑定优化:每次EditingControlShowing触发时,若不判断重复绑定,会导致同一个事件被多次注册,引发重复执行逻辑的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:05:30