程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> .Net 2.0 DataGridView中鍵盤事件處理方法

.Net 2.0 DataGridView中鍵盤事件處理方法

編輯:.NET實例教程
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;
        }

  哈哈,本人一試,可以了,搞定,睡覺!

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved