datagridview 按回车键横向移动问题

在开发记件工资系统时,为了提高操作效率,需要使 DataGridView 在按回车键时横向移动而非向下移动。文章介绍了问题背景,并探讨了网上常见的处理方法为何无效,原因是命令键具有优先权。通过重写 DataGridView 的 ProcessCmdKey 方法,实现了回车键横向移动的功能,提供了完整的 C# 代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 我在作一个关于记件工资系统时候,datagridview 按回车键默认是向下一行移动,操作文员为了输入更快一点,需要按回车键就横向移动继续输入数据,其操作文员主要用右手操作键盘的数字键区域,每天输入量大,所以必须要解决这个实际问题.

   我在网上搜索了一些:

 private void dgv_jj_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
               
           
                MessageBox.Show("enter");
                SendKeys.Send("{TAB}");
                SendKeys.Send("{UP}");

            }
        }
            private void dgv_jj_KeyDown(object sender, KeyEventArgs e)
        {
        if  (e.KeyCode == Keys.Enter)
            {
                e.Handled = true;

                SendKeys.Send("{TAB}");
            }


        }
等等关于datagridview键盘的事件都没有反应!纳闷,微软既然设计了此事件为什么没有反映呢?网上也是千篇一律的这样的代码,那些人我怀疑跟本没有编译运行过,就在那揭贴!

   原来主要是因为快捷键与菜单快捷方式被称为命令键,命令键也就始终比常规输入键具有优先权。命令键的键盘响应已经被控件封装为protected型了。控件编写人员把多个预定义的键盘绑定方案封装起来,称为快捷键。我们在Keydown/KeyPress中没办法拦截到Enter、SHIFT、CTRL 、ALT 键和其它一些键盘按键正是这个原因。为解决这些问题VS.NET给出了ProcessCmdKey 方法,我们可以通过重写datagridview 的ProcessCmdKey方法来改变其命令键值的相应事件 。

   后来,我还是在网上找到真正的揭贴代码:重写datagridview控件相关事件.

整个类代码:

using System;
using System.Collections.Generic;
using System.Text;

namespace MIS.Wage
{
    class mygridview : System.Windows.Forms.DataGridView
    {
        protected override void OnKeyUp(System.Windows.Forms.KeyEventArgs e)
        {

            if (e.KeyCode == System.Windows.Forms.Keys.Enter)
            {

                e.Handled = true;
                // MessageBox.Show("enter");
               // System.Windows.Forms.SendKeys.Send("{TAB}");
                //System.Windows.Forms.SendKeys.Send("{UP}");

               // System.Windows.Forms.SendKeys.Send("{RIGHT}"); 
            }
        }

        protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
        {
            switch (keyData)
            {
                case System.Windows.Forms.Keys.Enter:
                    System.Windows.Forms.SendKeys.Send("{TAB}");
                  //  System.Windows.Forms.SendKeys.Send("{UP}");

                    return true;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

    }
}
编译后,再在窗口设计区域工具箱里直接拖出即可利用!我测试过,没问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值