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

Posted on 2011-08-28 20:37  逍遥散人  阅读(3666)  评论(0编辑  收藏  举报

本文引用至:http://hurt0759.blog.163.com/blog/static/6150904201008105614457/

 

.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

Copyright © 2024 逍遥散人
Powered by .NET 9.0 on Kubernetes