C# 解决DataGridView回车后自动下移一行的问题

问题描述

DataGridView是一个很常用的数据控件,不仅可以用于二维数据的显示,同时还可以方便地进行编辑。一般控件越强大,往往也意味着它的结构很复杂,从而会有一些使用的问题。在DataGridView控件中,相信大多数使用者都会遇到一个问题就是:在单元格编辑后焦点会自动向下移动一格。

在网上有很多文章都提出了重写 ProcessCmdKey 来解决,并且给出了相应的代码,但是这些重写都是在窗体级完成,即写在窗体内。虽然解决了问题,但是不符合设计模式的开放封闭原则,使用起来会带来很多麻烦。

解决思路

为了解决这个问题,经研究发现 ProcessCmdKey 的传送机制是基于控件结构的遍历,即在控件上是一层一层传输,所以我们可以直接对 DataGridView 进行派生,然后在派生中重写这个方法即可。

代码实现

public partial class Workstations_Main : Form
{
    public Workstations_Main()
    {
        InitializeComponent();
        Workstation_Main = this;
        Workstation_Main.Load += (Sender, EventArgs) => MainForm_Init_Start();
    }
	//重写
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Enter)
        {
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

}

//网络素材仅限收藏 方便学习

posted @ 2021-06-08 09:37  New_HackerHK  阅读(615)  评论(0编辑  收藏  举报