C# datagridview单元格中的向上和向下键未触发按键事件文本框

C# datagridview单元格中的向上和向下键未触发按键事件文本框,c#,winforms,C#,Winforms,我试图在datagridview单元格按键事件中弹出一个选择框。选择框弹出功能正常,但上下键未启动。我想在按下datagridview单元格上下键的同时,向下和向上移动选择框数据 我正在使用这些代码 private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { DataGridView dttmp = (

我试图在datagridview单元格按键事件中弹出一个选择框。选择框弹出功能正常,但上下键未启动。我想在按下datagridview单元格上下键的同时,向下和向上移动选择框数据

我正在使用这些代码

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        DataGridView dttmp = (DataGridView)sender;
        csearch = "";
        var txtbox = e.Control as TextBox;
        if (txtbox != null)
        {
            txtbox.KeyPress -= new KeyPressEventHandler(textBoxPart_TextChanged);
            txtbox.KeyPress += new KeyPressEventHandler(textBoxPart_TextChanged);
            txtbox.Validating -= new CancelEventHandler(txtbox_Validating);
            txtbox.Validating += new CancelEventHandler(txtbox_Validating);
            txtbox.LostFocus += new EventHandler(txtbox_LostFocus);
        }
    }
 private void textBoxPart_TextChanged(object sender, KeyPressEventArgs e)
    {
        if (dataGridView1.CurrentCell.ColumnIndex == 1)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Up))
            {
                if (srchbox.Rows.Count > 1)
                {
                    int curind = srchbox.CurrentRow.Index;
                    //srchbox.Rows[curind - 1].Selected = true;
                    if (curind - 1 >= 0)
                    {
                        srchbox.CurrentCell = srchbox.Rows[curind - 1].Cells[1];
                        srchbox.Refresh();
                    }
                }
                e.Handled = true;
            }

}

改用keydown或keyup事件

国家:

按键事件不是由非字符键引发的;但是,非字符关键帧确实会引发KeyDown和KeyUp事件

尝试使用事件:

DataGridView
控件中的当前单元格发生更改或控件接收到输入焦点时发生

或事件

当单元格失去输入焦点且不再是当前单元格时发生


我也尝试了按键事件,但不起作用。。我将尝试keyup事件我试图做与海报完全相同的事情,突出显示文档中的这一点帮助我解决了问题,将事件切换为keyup事件。谢谢你,杰森!所以您需要使用DataGridView.CellEnter和DataGridView.CellLeave事件。。。为什么需要这个:DataGridView dttmp=(DataGridView)sender?。。您还将事件分配给网格上的任何文本框,您可能希望识别所需的文本框并仅将事件分配给该文本框。。。在cellenter上分配事件,在cellleave上取消分配事件。。使用e.KeyCode==Keys.Up代替e.KeyChar==Convert.ToChar(Keys.Up)