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
5
A
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:
- Set KeyPreview propriété pour la forme à true.
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; } }
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;
}
}
événement KeyDown du formulaire ne sera pas tiré. – Zhenya