Как разрешить моему элементу управления обнаруживать клавишу Escape до того, как DataGridView закроет мой элемент управления? - PullRequest
2 голосов
/ 14 января 2009

У меня есть элемент управления с функцией отмены, когда пользователь нажимает Escape, элемент управления вернет исходное значение.

Проблема в том, что я интегрировал свой элемент управления в DataGridView. DataGridView «съедает» Escape-ключ, поэтому мой элемент управления не может обнаружить Escape-ключ.

Когда я поместил «return true» в EditingControlWantsInputKey, мой элемент управления смог обнаружить клавишу Escape, но возникла другая проблема, DataGridView не может закрыть мой элемент управления, он остается в режиме редактирования.

Как разрешить моему элементу управления обнаруживать клавишу Escape, а также разрешить DataGridView закрыть мой элемент управления?

Ответы [ 3 ]

2 голосов
/ 14 января 2009

Я смог решить свою проблему. Я сделал метод Undo моего LookupBox открытым, затем на моем элементе управления 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);


    }
0 голосов
/ 21 июля 2015

Или вы можете добавить обработчик PreviewKeyDown в свой элемент управления для редактирования и обнаружить Escape там.

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

            if(e.Control is DataGridViewTextBoxEditingControl)
            {                 
                var editBox = e.Control as DataGridViewTextBoxEditingControl;
                editBox.PreviewKeyDown += KeyPressHandler;
            }
0 голосов
/ 14 января 2009

Вы должны «возвращать истину» только тогда, когда Keys.KeyCode == Keys.Escape;
в противном случае возврат ! DataGridViewWantsInputKey.

...