2009-01-14 32 views
2

我有一個撤銷功能的控件,當用戶按下Escape控件將恢復原始值。如何讓我的控件在DataGridView關閉我的控件之前檢測Escape鍵?

問題是當我將控件集成到DataGridView。 DataGridView「吃」了Escape鍵,因此我的控件無法檢測到Escape鍵。

當我在EditingControlWantsInputKey上放置「返回true」時,我的控件能夠檢測Escape鍵,但出現其他問題,DataGridView無法關閉我的控件,它保留在EditMode中。

如何讓我的控件檢測到Escape鍵,同時也允許DataGridView關閉我的控件?

回答

2

我能解決我自己的問題。我做了我LookupBox的撤消方法公衆,然後在我的DataGridView控件(類DgvLookupBoxEditingControl:LookupBox,IDataGridViewEditingControl),我把下面的代碼:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == Keys.Escape)    
      this.Undo();    

     return base.ProcessCmdKey(ref msg, keyData); 


    } 
0

只有在Keys.KeyCode == Keys.Escape;
否則返回 !dataGridViewWantsInputKey。

+0

我試過了,但沒有奏效。這是我的控制,然後吃的關鍵,因此DataGridView無法關閉我的控制。 – 2009-01-14 05:56:07

0

也可以添加PreviewKeyDown處理程序您的編輯控件並在那裏檢測Escape。

  dataGridView1.EditingControlShowing += (o, e) => { 

      if(e.Control is DataGridViewTextBoxEditingControl) 
      {     
       var editBox = e.Control as DataGridViewTextBoxEditingControl; 
       editBox.PreviewKeyDown += KeyPressHandler; 
      }