2009-07-01 16 views
5

Tengo un .NET TextBox con la función Autocompletar en el formulario. El formulario también ha definido AcceptButton y CancelButton. Si intento enviar una sugerencia con la tecla Intro o cierro la lista desplegable con Esc, mi formulario se cierra. ¿Cómo puedo evitar este comportamiento?Autocompletar de TextBox y botones predeterminados

Respuesta

2

No asigne las propiedades de formulario AcceptButton y CancelButton. Establezca DialogResult en los botones Evento OnClick.

0

en lugar de Aceptar y Cancelar puede ir para el siguiente enfoque:

  1. Establecer TeclaDePresentaciónPreliminar propiedades para el formulario en true.
  2. Manejar la KeyDown caso de la forma, en el método de control puede tener algo similar al código de abajo

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

evento KeyDown del formulario. – Zhenya

2

Una manera sencilla es eliminar AcceptButton y CancelButton propiedades mientras está en el cuadro de texto de autocompletar:

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

Otra opción es derivar su propia clase de cuadro de texto personalizado que realiza la validación cuando se pulsa enture/Retorno: No se disparó

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; 
    } 
} 
Cuestiones relacionadas