2009-07-01 12 views
5

Ho un .NET TextBox con funzionalità AutoComplete nel modulo. Il modulo ha anche AcceptButton e CancelButton definiti. Se provo a inviare un suggerimento con il tasto Invio o chiudi il menu a discesa con Esc, il mio modulo si chiude. Come posso prevenire questo comportamento?Pulsanti di completamento automatico e default di TextBox

risposta

2

Non assegnare le proprietà del modulo AcceptButton e CancelButton. Imposta DialogResult nei pulsanti OnClick evento.

0

invece di accettare e pulsanti Annulla si può andare per il seguente approccio:

  1. Impostare KeyPreview proprietà per la maschera su true.
  2. Maneggiare il KeyDown caso di forma, nel metodo del gestore si può avere qualcosa di simile al codice qui sotto

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

KeyDown del modulo. – Zhenya

2

modo semplice è quello di rimuovere AcceptButton e CancelButton proprietà mentre ti trovi nella casella di testo di completamento automatico:

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

Un'altra opzione è quella di derivare una classe TextBox personalizzata che esegue la convalida quando si preme Enture/ritorno: non sarà licenziato

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; 
    } 
} 
Problemi correlati