2009-07-01 7 views
5

J'ai une fonctionnalité .NET TextBox avec saisie semi-automatique sur le formulaire. Le formulaire a également AcceptButton et CancelButton définis. Si j'essaie de valider une suggestion avec la touche Entrée ou de fermer la liste déroulante avec Esc, mon formulaire se ferme. Comment puis-je empêcher ce comportement?Boutons de saisie semi-automatique et par défaut de TextBox

Répondre

2

N'affectez pas les propriétés de formulaire AcceptButton et CancelButton. Définissez DialogResult dans l'événement OnClick des boutons.

0

au lieu d'accepter et Annuler, vous pouvez aller pour l'approche suivante:

  1. Set KeyPreview propriété pour la forme à true.
  2. Manipulez le KeyDown événement de la forme, dans la méthode de gestionnaire vous pouvez avoir quelque chose de similaire au code ci-dessous

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

événement KeyDown du formulaire ne sera pas tiré. – Zhenya

2

Une façon simple est de supprimer AcceptButton et CancelButton propriétés lorsque vous êtes dans la zone de texte auto-complétée:

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

Une autre option est d'obtenir votre propre classe TextBox personnalisée qui effectue une validation lors enture/retour est pressé:

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; 
    } 
} 
Questions connexes