2

我有一个具有撤消功能的控件,当用户按下 Escape 时,控件将恢复原始值。

问题是当我将控件集成到 DataGridView 时。DataGridView “吃掉” Escape 键,因此我的控件无法检测到 Escape 键。

当我在 EditingControlWantsInputKey 上设置“return true”时,我的控件能够检测到 Escape 键,但出现了其他问题,DataGridView 无法关闭我的控件,它停留在 EditMode。

如何让我的控件检测 Escape 键同时还允许 DataGridView 关闭我的控件?

4

3 回答 3

2

我能够解决我自己的问题。我公开了我的LookupBox的Undo方法,然后在我的 DataGridView 控件(类 DgvLookupBoxEditingControl : LookupBox, IDataGridViewEditingControl)上,我输入了以下代码:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Escape)            
            this.Undo();            

        return base.ProcessCmdKey(ref msg, keyData);


    }
于 2009-01-14T06:39:58.547 回答
0

仅当 Keys.KeyCode == Keys.Escape; 时才应“返回 true”;
否则返回 !dataGridViewWantsInputKey。

于 2009-01-14T05:40:01.117 回答
0

或者您可以将 PreviewKeyDown 处理程序添加到您的编辑控件并在那里检测 Escape。

            dataGridView1.EditingControlShowing += (o, e) => {

            if(e.Control is DataGridViewTextBoxEditingControl)
            {                 
                var editBox = e.Control as DataGridViewTextBoxEditingControl;
                editBox.PreviewKeyDown += KeyPressHandler;
            }
于 2015-07-21T20:51:47.550 回答