C#中datagridview使用技巧系列谈(-)让输入焦点从左到右

   问题的提出

      经常使用的datagridview控件,当你利用它来输入数据时,如果你按下Enter 时,系统默认的是将输入焦点移动至当前列的下一行,但按中国人日常的习惯,我们希望它从左到右进行输入,怎么办呢?

  这里我们就要修改系统的两个默认键盘时间,以实现我们自如的控制datagridview埪件对回车Press事件的处理方式,具体怎么操作呢?

   新建一用户控件-该用户埪件继承于datagridview,在该埪件的代码中重写ProcessDialogKey, ProcessDataGridViewKey两个事件,让将该用户控件添加到你的项目中就可以应用了。

public   class   dgv   :   DataGridView              

       {                             protected   override   bool   ProcessDialogKey(Keys   keyData)                          

  {                                     Keys   key   =   (keyData   &   Keys.KeyCode);                                

     if   (key   ==   Keys.Enter)                            

         {                                             return   this.ProcessRightKey(keyData);        

                            }                                

    return   base.ProcessDialogKey(keyData);                

            }                    

         protected   override   bool   ProcessDataGridViewKey(KeyEventArgs   e)          

                   {                                     if   (e.KeyCode   ==   Keys.Enter)                              

       {                                                                                   return   this.ProcessRightKey(e.KeyData);                                       }                                

    return   base.ProcessDataGridViewKey(e);                             }    

                            public   new   bool   ProcessRightKey(Keys   keyData)                      

      {                                     Keys   key   =   (keyData   &   Keys.KeyCode);                          

           if   (key   ==   Keys.Enter)                                     {              

                              //   for   new   row   use   

//如果dgv中输入焦点在最后一行最后一列则新增行,并将输入交代那移到新增行,首列                                           if   ((base.CurrentCell.ColumnIndex   ==   (base.ColumnCount   -   1))              &&   (base.CurrentCell.RowIndex   ==   (base.RowCount   -   1)))                                          

    {                                                   ((BindingSource)base.DataSource).AddNew();                                                   base.CurrentCell   =   base.Rows[base.RowCount   -   1].Cells[0];                              

                       return   true;                                              }                                  

              if   ((base.CurrentCell.ColumnIndex   ==   (base.ColumnCount   -   1))                                                       &&   (base.CurrentCell.RowIndex   +   1   !=   base.NewRowIndex))                                  

           {                                                     base.CurrentCell   =   base.Rows[base.CurrentCell.RowIndex   +   1].Cells[0];                                                     return   true;                                             }            

                                return   base.ProcessRightKey(keyData);                                     }          

                          return   base.ProcessRightKey(keyData);                             }        

            }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值