如何允许我的控件在DataGridView关闭我的控件之前检测Escape键?

时间:2009-01-14 05:27:01

标签: datagridview escaping undo

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

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

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

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

3 个答案:

答案 0 :(得分:2)

我能够解决自己的问题。我将 LookupBox 撤消方法设为public,然后在我的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);


    }

答案 1 :(得分:0)

只有当Keys.KeyCode == Keys.Escape时,你才应该“返回true”;
否则返回 !dataGridViewWantsInputKey。

答案 2 :(得分:0)

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

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

            if(e.Control is DataGridViewTextBoxEditingControl)
            {                 
                var editBox = e.Control as DataGridViewTextBoxEditingControl;
                editBox.PreviewKeyDown += KeyPressHandler;
            }