2013-04-05 54 views
2

我想在datagridview的C#中的細胞做treatement,這TRAITEMENT是開放的形式當我按下一個細胞。的DataGridView,如何捕獲細胞的KeyPress事件C#

在C#

沒有一個事件(按鍵),讓我加我處理直接

互聯網上搜索後,我發現了以下解決方案

private void dGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     e.Control.KeyPress += 
     new KeyPressEventHandler(Control_KeyPress); 
    } 


      private void Control_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      if ((Strings.Asc(e.KeyChar) >= Strings.Asc(Keys.A.ToString()) && Strings.Asc(e.KeyChar) >= Strings.Asc(Keys.Z.ToString())) || (Strings.Asc(e.KeyChar) >= Strings.Asc(Keys.D0.ToString()) && Strings.Asc(e.KeyChar) >= Strings.Asc(Keys.D9.ToString()) || (Strings.Asc(e.KeyChar) >= 97 && Strings.Asc(e.KeyChar) > 122))) 
      { 
       ------ 
      } 
     } 

,但它不工作。 在調試dGridView_EditingControlShowing執行該事件的代碼,但Control_KeyPress功能的代碼不能運行

任何想法,請

回答

6

你應該設置你的FormKeyPreview proprety到真正。 你應該處理主窗體上按下的鍵事件。 這是因爲Control.KeyPress事件時按下某個鍵,而對照已集中

發生。(msdn

public Form() 
{ 
    InitializeComponent(); 
    this.KeyPreview = true; 
    this.KeyPress += new KeyPressEventHandler(Control_KeyPress); 
} 

private void Control_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    //your code 
} 
+1

「問題」是此方法處理所有窗體的按鍵事件,不僅DGV的人.. – T30 2014-09-08 14:26:23

1

只是爲了讓第一個答案很簡單。 1)進入設置「的KeyPreview」到「真」 3)在窗體的按鍵事件表單的屬性 2):

private void Control_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    //your code 
}