2009-07-01 19 views
5

Ich habe eine .NET TextBox mit AutoVervollständigen-Funktion auf dem Formular. Das Formular hat auch AcceptButton und CancelButton definiert. Wenn ich versuche, einen Vorschlag mit der Eingabetaste zu bestätigen oder das Dropdown-Menü mit Esc zu schließen, wird mein Formular geschlossen. Wie kann ich dieses Verhalten verhindern?TextBox Autocomplete und Standardschaltflächen

Antwort

2

Keine AcceptButton- und CancelButton-Formulareigenschaften zuweisen. Setzen Sie DialogResult in den Schaltflächen OnClick-Ereignis.

0

statt zu akzeptieren und Abbrechen Schaltflächen, die Sie für den folgenden Ansatz gehen:

  1. Set KeyPreview Eigenschaft für das Formular auf true.
  2. Behandeln Sie das KeyDown- Ereignis des Formulars, in der Behandlermethode Sie etwas ähnlich den Code unten

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

KeyDown-Ereignis des Formulars wird nicht ausgelöst werden. – Zhenya

2

einfache Art und Weise haben kann, ist zu entfernen AcceptButton und CancelButton Eigenschaften während Sie sich in der Auto-Vervollständigen-Textbox befinden:

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

Eine weitere Option ist Ihre eigene benutzerdefinierte TextBox Klasse abzuleiten, die Validierung durchführt, wenn Enture/Return gedrückt wird:

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; 
    } 
} 
Verwandte Themen