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);
}
}
//网络素材仅限收藏 方便学习