2009-07-01 1 views
5

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

ответ

2

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

0

вместо Принять и Отмена вы можете перейти на следующий подход:

  1. Набор KeyPreview свойство для формы в действительности.
  2. Ручка KeyDown событие формы, в методе обработчика вы можете иметь что-то похожее на приведенный ниже код

    switch (e.KeyCode) 
    { 
        case Keys.Enter: 
        { 
         if (!txtAuto.Focused) 
         { 
          Save(); 
         } 
         break; 
        } 
        case Keys.Escape: 
        { 
         if (!txtAuto.Focused) 
         { 
          Close(); 
         } 
         break; 
        } 
    } 
    
+0

KeyDown события формы не будет срабатывать. – Zhenya

2

Простой способ удалить 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; 
    } 
0

Другого варианта заключается в получении своего собственного класса 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; 
    } 
}