У меня есть .NET TextBox с функцией автозаполнения в форме. В форме также определены AcceptButton и CancelButton. Если я попытаюсь зафиксировать предложение с помощью клавиши Enter или закрыть раскрывающийся список с помощью Esc, моя форма закроется. Как я могу предотвратить такое поведение?
Автозаполнение TextBox и кнопки по умолчанию
Ответы (4)
Не назначайте свойства формы AcceptButton и CancelButton. Установите DialogResult в событии OnClick кнопок.
person
arbiter
schedule
01.07.2009
Простой способ - удалить свойства 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;
}
person
TheVillageIdiot
schedule
03.07.2009
вместо кнопок Принять и Отменить вы можете использовать следующий подход:
- Задайте для свойства KeyPreview формы значение true.
Обработайте событие KeyDown формы, в методе обработчика вы можете иметь что-то похожее на приведенный ниже код
switch (e.KeyCode) { case Keys.Enter: { if (!txtAuto.Focused) { Save(); } break; } case Keys.Escape: { if (!txtAuto.Focused) { Close(); } break; } }
person
Eros
schedule
01.07.2009
Событие KeyDown формы не будет запущено.
- person Zhenya; 02.07.2009
Другой вариант - создать свой собственный класс 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;
}
}
person
Eric
schedule
03.07.2009