登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

hurt0759的个人主页

人生常态--跋涉.人生暂态--歇息.

 
 
 

日志

 
 

c# DataGridView中键盘事件处理方法 转  

2010-01-08 10:56:14|  分类: IT |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

.Net 2.0中的DataGridView比前期版本的DataGrid功能强多了,但本人还是觉得有不足的地方。比如说其DataGridViewButtonColumn列,像这样的列好像在本人开发过的系统中没有太多的用(最重要的还是不能在其上编辑,可能是没找到方法吧,再研究)。还有DataGridViewComboBoxColumn列,看起来比较漂亮,将其放在实际中,其实下拉的基本是列表或弹出一Form进行选择,但还是有问题。得到的结果要是DataGridViewComboxColumn列中的值,如果不是就会报错。还不可编辑(可能是没找到方法,再研究,找到了再继续发贴)。与以前VB6/VC6等中第三方组件开发商ComponentOne公司开发的True DB Grid还是要差点。

  下面主要介绍研究成果:.Net 2.0中的键盘事件。

  .Net 2.0中的键盘事件,研究了好久,只发现这两种 :一种是DataGridView键盘事件,另一种是列键盘事件。

  第一种、DataGridView中键盘事件处理方法。此方法的使用与一般控件的方法相同。操作也比较简单。这种在DataGirdView中的事件用来操作比如删除一列啦,添加一列啦,还有插入一列啦什么的。键盘事件基本就三个:KeyDown,KeyPress,KeyUp三个事件,这里我只介绍一个,其他的都是相同的。简单介绍如下:

  注:以下示例语句的DataGridView名为dgvDetails.

  委托方法:

  this.dgvDetails.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.dgvDetails_KeyPress);

       方法:

  private void dgvDetails_KeyPress(object sender, KeyPressEventArgs e)

        {

          //想怎么操作在这时处理

        } 

  第二种、就是DataGridView中列的事件,这种事件放在DataGridView中,开始本人用KeyPress来控件输入的数据为数字,其他的输入不进去。怎么搞都不行。不好意思,本人系统没有Help。因软件是网友送的,没送Help。摸了好久,才发现有这么个方法来实现。列的事件主要用来操作列中的数据。比如说:电话号码,数量,金额啊什么的。和大家分享研究成果。

  首先,要先定义一个Class级的变量(放在Form内,可别放在外面),

  private DataGridViewTextBoxEditingControl EditingControl;

       其次,添加EditingControlShowing事件委托

this.dgvDetails.EditingControlShowing += new System.Windows.Forms.DataGridViewEditingControlShowingEventHandler(this.dgvDetails_EditingControlShowing);

  第三步,定义委托的方法:

  private void dgvDetails_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

        {

             EditingControl = (DataGridViewTextBoxEditingControl)e.Control;

            EditingControl.KeyPress += new KeyPressEventHandler(EditingControl_KeyPress);

        }

  注:加粗的地方很重要,主要是针对列的事件,这里才是正题。

  第四步,定义列的委托方法啦,引用以其他控件引用完全相同。

  private void EditingControl_KeyPress(object sender, KeyPressEventArgs e)

        {

            if (!char.IsDigit(e.KeyChar) ) e.Handled = true;

        }

  哈哈,本人一试,可以了,搞定,睡觉!Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId

  评论这张
 
阅读(3187)| 评论(1)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018