Автозаполнение TextBox и кнопки по умолчанию

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

Ответы на вопрос(4)

Не назначайте свойства формы AcceptButton и CancelButton. Установите DialogResult в событиях кнопок OnClick.

Простой способ удалитьAcceptButton а такжеCancelButton Свойства, пока вы находитесь в автозаполнении текстового поля:

    public Form1()
    {
        InitializeComponent();

        txtAuto.Enter +=txtAuto_Enter;
        txtAuto.Leave +=txtAuto_Leave;
    }

    private void txtAC_Enter(object sender, EventArgs e)
    {
        AcceptButton = null;
        CancelButton = null;
    }

    private void txtAC_Leave(object sender, EventArgs e)
    {
        AcceptButton = btnOk;
        CancelButton = btnCancel;
    }

Другой вариант - получить свой собственный класс TextBox, который выполняет проверку при нажатии Enture / Return:

public class MyTextBox : TextBox
{
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Enter || keyData == Keys.Return)
        {
            // Perform validation here
            return true;
        }
        else
            return false;
    }
}

вместо того, чтобы принять и отменить кнопки, вы можете перейти к следующему подходу:

Set KeyPreview property for the form to true.

Handle the KeyDown event of the form, in the handler method you can have something similar to the below code

switch (e.KeyCode)
{
    case Keys.Enter:
    {
        if (!txtAuto.Focused)
        {
            Save();
        }
        break;
    }
    case Keys.Escape:
    {
        if (!txtAuto.Focused)
        {
            Close();
        }
        break;
    }
}
 Zhenya02 июл. 2009 г., 14:54
Событие KeyDown формы не будет запущено.

Ваш ответ на вопрос