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

Posted

技术标签:

【中文标题】向上和向下键未触发 datagridview 单元格中的按键事件文本框【英文标题】:up and down key not firing keypress event textbox in datagridview cell 【发布时间】:2012-12-23 07:25:50 【问题描述】:

我正在尝试在 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;
            

【问题讨论】:

所以你需要使用 DataGridView.CellEnter 和 DataGridView.CellLeave 事件...你为什么需要这个:DataGridView dttmp = (DataGridView)sender; ?..您还将事件分配给网格上的任何文本框,您可能想要识别您需要的文本框并将事件分配给仅...在cellenter分配事件,并在cellleave取消分配它..而不是e.KeyChar == Convert.ToChar(Keys.Up) 使用 e.KeyCode == Keys.Up 【参考方案1】:

尝试使用DataGridView.CellEnter事件:

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

DataGridView.CellLeave事件

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

【讨论】:

【参考方案2】:

改用 keydown 或 keyup 事件。

Control.KeyPress documentation 状态:

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

【讨论】:

我也尝试过 keydown 事件但不工作.. 我会尝试 keyup 事件 我试图做与海报完全相同的事情,并且从文档中突出显示这一点帮助我通过将我的事件切换到 KeyUp 事件来解决我的问题。谢谢你,杰森!

以上是关于向上和向下键未触发 datagridview 单元格中的按键事件文本框的主要内容,如果未能解决你的问题,请参考以下文章

使用按钮将数值从 Numeric 控件传递到 DataGridView 控件中的相应单元格

当我在选择上使用向上或向下箭头时,为啥 jquery 更改事件不触发?

asp.net(C#) datagridview 如何实现单元格值更改后自动触发事件

datagridview单元格输入内容触发事件

向上或向下移动 HTML 表格单元格(不是行)

jquery $(window).resize 事件在移动向上或向下滚动时触发