Обработка ключей в datagridview - PullRequest
1 голос
/ 15 февраля 2012

Я использую DataGridView, и в некоторых местах я добавляю к нему элемент управления (например, текстовое поле, выпадающий список)

 dataGridView1.Controls.Add(comboBox);
 comboBox.Focus();

Проблема заключается в том, что при использовании этого элемента управления и при выборе выбора с помощью клавиши ENTER DataGridView вызывает«обрабатывать» клавишу -> после нажатия на кнопку ввода вместо выбора sth в выпадающем списке, выбор в виде сетки данных изменяется (перемещается в следующую ячейку).

Я использую что-то вроде:

   public class MyDataGridView:DataGridView
{
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if(keyData == Keys.Enter)
        {
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

Но это приводит к тому, что datagridview и выпадающий список не отвечают на ENTER, а другие ключи ...

Дополнительная информация: Iдолжен использовать класс ComboBox вместо DataGridViewCombobox.Может кто-нибудь помочь мне, как обрабатывать ENTER в моем комобоксе?

1 Ответ

0 голосов
/ 22 июня 2012

Попробуйте:

if((keyData == Keys.Enter) && (MyComboBox.Focused))

, поэтому DataGridView отвечает на ENTER, кроме случаев, когда ваш элемент управления сфокусирован.

Я не уверен, что следующий код соответствует вашей ситуации, но, возможно, вы могли бы попробовать что-то вроде:

public class MyDataGridView:DataGridView
{
    public ComboBox MyComboBox { get; set; } //in case you had no other way to refer to it

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if((keyData == Keys.Enter) && (MyComboBox.Focused))
        {
            //commit choice logic
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

и из вашей формы, если необходимо, установите ссылку на ComboBox:

dataGridView1.Controls.Add(comboBox);
dataGridView1.MyComboBox = comboBox;
comboBox.Focus();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...