现在的位置: 首页 > 综合 > 正文

datagridview 按回车键横向移动问题

2013年07月04日 ⁄ 综合 ⁄ 共 2039字 ⁄ 字号 评论关闭

 我在作一个关于记件工资系统时候,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);
        }

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

抱歉!评论已关闭.