C# c datagridview键处理

C# c datagridview键处理,c#,winforms,datagridview,combobox,C#,Winforms,Datagridview,Combobox,我使用DataGridView,在某些地方我添加了控件,例如textbox、combobox dataGridView1.Controls.Add(comboBox); comboBox.Focus(); 问题是,使用此控件,而不是使用ENTER提交选择,会导致DataGridView处理键->单击ENTER而不是从组合框中选择sth后,DataGridView中的选择将移动到下一个单元格 我用的是: public class MyDataGridView:DataGridView

我使用DataGridView,在某些地方我添加了控件,例如textbox、combobox

 dataGridView1.Controls.Add(comboBox);
 comboBox.Focus();
问题是,使用此控件,而不是使用ENTER提交选择,会导致DataGridView处理键->单击ENTER而不是从组合框中选择sth后,DataGridView中的选择将移动到下一个单元格

我用的是:

   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和combobox不响应ENTER键,其他键

附加信息:我必须使用ComboBox类,而不是DataGridViewCombobox。有人能帮我如何处理输入框吗?

试试:

if((keyData == Keys.Enter) && (MyComboBox.Focused))
所以DataGridView会响应ENTER,除非控件处于焦点状态

我不确定以下代码是否适合您的情况,但也许您可以尝试以下方法:

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();

你向我展示了解决类似问题的方法。我发布了一个解决方案,我认为您必须在覆盖的ProcessCmdKey中处理ENTER。我没找到别的办法,你解决了吗?我认为可以在MyDataGridViewClass中保存对组合框的引用,以便可以从ProcessCmdKey方法中对其进行操作。