对按下DataGridView新行的键做出反应,但不为其创建行

时间:2016-05-31 08:15:05

标签: c# winforms datagridview

我有一个DataGridView,如果用户按下新行中的某个键,我想打开另一个窗口,该窗口知道按下了哪个键,但是没有创建新行。我看到此处忽略了KeyDownKeyPress个事件;我可以使用RowsAdded,但行会被添加;或者我可以使用CellBeginEdit并设置e.Cancel=true,但我无法访问按下的键。关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

KeyPress事件确实是你想要的。

DataGridView不会忽略它,但它由负责用户输入的TextBox处理。

所以你需要抓住它。

以下是一个例子:

TextBox editTB = null;   // a class level variable to hold the reference

// here we get the reference to the editing control
// other control types will work as well..
private void dataGridView1_EditingControlShowing(object sender, 
                           DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control is TextBox) 
    {
        editTB = (TextBox)e.Control;
        editTB.KeyPress -= editTB_KeyPress;
        editTB.KeyPress += editTB_KeyPress;
    }
}

void editTB_KeyPress(object sender, KeyPressEventArgs e)
{
    // use the checks you actually need..
    if (e.KeyChar == '#')
    {
        // do your things..
        Console.WriteLine("---->" + e.KeyChar);
        e.Handled = true;   // eat up the key event
    }            
}