J'ai essayé ce qui suit:
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if ((Keys) e.KeyValue == Keys.Escape)
this.Close();
}
Mais ça ne marche pas.
Ensuite, j'ai essayé ceci:
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.KeyCode == Keys.Escape)
this.Close();
}
Et toujours rien ne fonctionne.
Le KeyPreview sur mes propriétés de formulaire Windows Forms est défini sur true ... Qu'est-ce que je fais mal?
Réponses:
Cela fonctionnera toujours, quelle que soit l'affectation appropriée du gestionnaire d'événements, KeyPreview, CancelButton, etc.:
la source
true
de àProcessCmdKey
pour signaler que la clé est gérée, évitant ainsi le bruit "ding".Vous devriez simplement pouvoir définir la
CancelButton
propriété du formulaire sur votre bouton Annuler et vous n'aurez besoin d'aucun code.la source
En supposant que vous ayez un bouton "Annuler", la définition de la
CancelButton
propriété du formulaire (soit dans le concepteur, soit dans le code) devrait s'en occuper automatiquement. Placez simplement le code à fermer enClick
cas de bouton.la source
La réponse acceptée est en effet correcte, et j'ai utilisé cette approche à plusieurs reprises. Soudain, cela ne fonctionnait plus, alors j'ai trouvé cela étrange. Surtout parce que mon point d'arrêt ne serait pas touché pour la ESCclé, mais il frapperait pour d'autres clés.
Après le débogage, j'ai découvert que l'un des contrôles de mon formulaire remplaçait la
ProcessCmdKey
méthode, avec ce code:... et cela empêchait mon formulaire d'obtenir la ESCclé (remarquez le
return true
). Assurez-vous donc qu'aucun contrôle enfant ne reprend votre entrée.la source
Vous définissez KeyPreview sur true dans vos options de formulaire, puis vous y ajoutez l'événement Keypress. Dans votre événement de pression de touche, vous tapez ce qui suit:
key.Char == 27
est la valeur d'échappement en code ASCII.la source
Par bouton Échap, voulez-vous dire la touche Échap? A en juger par votre code, je pense que c'est ce que vous voulez. Vous pouvez également essayer Application.Exit (), mais Close devrait fonctionner. Avez-vous un thread de travail? Si un thread non en arrière-plan est en cours d'exécution, cela peut garder l'application ouverte.
la source
Vous devez l'ajouter à l'événement "KeyUp".
la source
Vous pouvez également déclencher une autre forme.
Par exemple, déclenchez un bouton Annuler si vous modifiez la propriété Form CancelButton et définissez le bouton Annuler.
Dans le code, vous traitez le bouton Annuler comme suit pour fermer le formulaire:
la source