且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

c#datagridview键处理

更新时间:2023-08-31 19:56:52

尝试:

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

所以DataGridView响应ENTER,除非你的控件集中。



我不确定下面的代码是否适合你的情况,但也许你可以尝试类似:

  public class MyDataGridView:DataGridView 
{
public ComboBox MyComboBox {得到;组; } //如果你没有其他方法来引用它

protected override bool ProcessCmdKey(ref Message msg,Keys keyData)
{
if((keyData == Keys .Enter)&&(MyComboBox.Focused))
{
//提交选择逻辑
return true;
}
return base.ProcessCmdKey(ref msg,keyData);
}
}

,如果需要,对您的ComboBox的引用:

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


I use DataGridView, and in some places I add control to it (e.g. textbox, combobox)

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

The problem is that using this control, and than commiting choice by using ENTER cause the DataGridView to "handle" the key -> after clickng enter instead of choosing sth from combobox, the selection in datagridview changes( moves to next cell).

I use sth like :

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

But it cause that datagridview and combobox doesn't answer to ENTER, and other keys...

Additional infromation: I must use ComboBox class, instead of DataGridViewCombobox. Can anyone help me how to handle ENTER in my comobox?

Try:

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

so DataGridView responds to ENTER except when your control is focused.

I am not sure the following code fits your situation, but maybe you could try something like:

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

and from your form, if it needs, set the reference to your ComboBox:

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