2012-02-15 18 views
1

私はDataGridViewのを使用して、いくつかの場所で、私はそれに(例えば、テキストボックス、コンボボックスを)コントロールを追加C#のDataGridViewのキー処理

dataGridView1.Controls.Add(comboBox); 
comboBox.Focus(); 

問題は、このコントロールを使用することで、原因ENTER使って、選択肢をコミットよりDataGridViewはコンボボックスからsthを選択するのではなく、clickngの後にキーを処理するために、datagridviewの選択が変更されます(次のセルに移動します)。

I使いかなっ好き:

public class MyDataGridView:DataGridView 
{ 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if(keyData == Keys.Enter) 
     { 
      return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

しかし、それはそれのDataGridViewを引き起こし、コンボボックスを入力するために応答しないと、他のキー...

追加のinfromation:私はComboBoxクラスを使用する必要があり、代わりにDataGridViewComboboxの誰でも私のコモボックスでENTERを処理する方法を教えてもらえますか?

+0

あなたは私に、同様の問題を解決する方法を示しました。私はソリューションを掲載[ここ](http://stackoverflow.com/questions/11108791/edit-a-textbox-cell-in-datagridview-as-if-it-were-a-normal-textbox-no-jumping- o)私はあなたが上書きするProcessCmdKeyの中でENTERを処理しなければならないと思います。私は他の方法を見つけませんでした。 – Dil

+0

あなたはそれを解決しましたか?私は、あなたがProcessCmdKeyメソッド内から操作できるように、MyDataGridViewClassでComboBoxへの参照を保持できると思います。 – Dil

答えて

0

試してみてください。

if((keyData == Keys.Enter) && (MyComboBox.Focused)) 

ので、DataGridViewのは、あなたのコントロールがフォーカスされている場合を除いて入力するように応答します。

私は次のコードは、あなたの状況に合うかわからないけど、多分あなたはのような何かを試みることができる:

public class MyDataGridView:DataGridView 
{ 
    public ComboBox MyComboBox { get; set; } //in case you had no other way to refer to it 

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if((keyData == Keys.Enter) && (MyComboBox.Focused)) 
     { 
      //commit choice logic 
      return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

をし、それが必要な場合は、あなたのフォームから、あなたのコンボボックスへの参照を設定します。

dataGridView1.Controls.Add(comboBox); 
dataGridView1.MyComboBox = comboBox; 
comboBox.Focus();