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

自定义DataGridView中Enter键替代Tab键功能异常问题

自定义DataGridView按Enter键需两次才向右移动的问题

我自定义了一个DataGridView控件,期望按下Enter键时让单元格焦点向右移动,替代默认的下移行为。但实际运行时发现需要按两次Enter键才能实现右移:第一次按下时仍会执行默认的下移操作,第二次按下才会按照预期向右移动。

相关代码如下:

public partial class Paymentdatagridview : DataGridView
{
    public Paymentdatagridview()
    {
        // 已设置EnableHeaderVisualStyles为false,让表头加粗
        // 向自定义DataGridView添加列
        DataGridViewColumn column1 = new DataGridViewTextBoxColumn();
        column1.Name = "Column1";
        column1.HeaderText = "Particulars";
        column1.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
        column1.SortMode = DataGridViewColumnSortMode.Automatic;
        this.Columns.Add(column1);

        DataGridViewColumn column2 = new DataGridViewTextBoxColumn();
        column2.Name = "Column2";
        column2.HeaderText = "Amount";
        column2.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        column2.SortMode = DataGridViewColumnSortMode.Programmatic;
        this.Columns.Add(column2);

        this.AllowUserToAddRows = true;
        this.RowHeadersVisible = false;
        this.ColumnHeadersDefaultCellStyle.Font = new Font("Tahoma", 9.75F, FontStyle.Bold);
        this.CellBorderStyle = DataGridViewCellBorderStyle.None;          
        InitializeComponent();
    }

    protected override void OnEnter(EventArgs e)
    {
        // 控件获得焦点时,将当前单元格设为第一个单元格并启用编辑
        if (RowCount > 0 && ColumnCount > 0)
        {
            CurrentCell = Rows[0].Cells[0];
            BeginEdit(true);
        }

        base.OnEnter(e);
    }

    protected override bool ProcessDataGridViewKey(KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            // 按下Enter键时移动焦点到下一列或下一行
            if (CurrentCell.ColumnIndex == ColumnCount - 1)
            {
                if (CurrentCell.RowIndex == RowCount - 1)
                {
                    // 到达最后一个单元格,将焦点移到第一个单元格
                    CurrentCell = Rows[0].Cells[0];
                }
                else
                {
                    // 移到下一行的第一个单元格
                    CurrentCell = Rows[CurrentCell.RowIndex + 1].Cells[0];
                }
            }
            else
            {
                // 移到下一列
                CurrentCell = Rows[CurrentCell.RowIndex].Cells[CurrentCell.ColumnIndex + 1];
            }

            BeginEdit(true);
            e.Handled = true;
            return true;
        }

        return base.ProcessDataGridViewKey(e);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:35:13