WinForms Textbox Автозаполнение событий - PullRequest
3 голосов
/ 14 декабря 2011

У меня есть .NET TextBox с функцией автозаполнения на форме. В форме также определены AcceptButton и CancelButton. Если я пытаюсь зафиксировать предложение с помощью клавиши Enter или закрыть с помощью клавиши Esc, моя форма закрывается.

Моя идея состоит в том, чтобы создать свое собственное текстовое поле, наследуемое от TexBox, и захватить клавиши Enter и клавишу Escape, но только тогда, когда виден интерфейс автозаполнения. Как я могу узнать, когда список автозаполнения виден?

public class MyTextBox : TextBox
{
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (IsOnAutoComplete())
        {
            if (keyData == Keys.Enter || keyData == Keys.Return)
            {
                return true;
            }
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

Другими словами, знаете ли вы, как я могу реализовать метод IsOnAutoComplete()? Имеет ли текстовое поле какие-либо события , чтобы заметить это?

Любое другое решение будет оценено. Заранее спасибо.

1 Ответ

1 голос
/ 14 декабря 2011

Простое решение, которое я использовал в прошлом, это удаление ассоциаций кнопок «Принять» и «Отмена», когда текстовое поле имеет фокус.

    textBox1.Enter += (o, args) =>
                                    {
                                        AcceptButton = null;
                                        CancelButton = null;
                                    };
    textBox1.Leave += (o, args) =>
                                    {
                                        AcceptButton = btnOK;
                                        CancelButton = btnCancel;
                                    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...