J'ai une winform C #, sur laquelle j'ai 1 bouton.
Maintenant, lorsque j'exécute mon application, le bouton se concentre automatiquement. p>
Le problème est J'ai essayé keypress code> de mon formulaire ne fonctionne pas car le bouton est concentré. P>
this.focus (); code> sur
Formule () code> événement, mais toujours l'événement KeyPress ne fonctionne pas. p>
5 Réponses :
Essayez de définir le formulaire KeyPreview a > propriété pour true. p>
OK bien, mais lorsque mon bouton a aussi un événement KeyPress, les deux événements KeyPress seront tirés.
Ce n'est pas vraiment une bonne solution. Cela ne fonctionnera pas pour toutes les clés possibles, cela n'empêche pas l'événement clé d'être volé par le contrôle, et c'est plus d'une ancienne école VB 6 moyen de manipuler des choses. Remplacer processcmdkey code> est l'approche habituelle.
@Codygray: Toutefois, il s'agit d'une alternative appropriée lorsque l'objectif est de recevoir les événements keypress code>. Évidemment, il faut faire attention lorsque vous l'utilisez, mais il est souvent plus facile / plus simple que d'essayer de cartographier des événements clés spécifiques aux caractères.
Vous devez remplacer le Processcmdkey Code> Strong> Méthode
pour votre formulaire. C'est la seule façon dont vous allez être informé des événements clés qui se produisent lorsque des contrôles d'enfants ont la mise au point du clavier.
échantillon code: p> comme pour pourquoi this.focus () code> ne fonctionne pas, c'est parce qu'un formulaire ne peut pas avoir l'accent par lui-même. Un contrôle EM> doit avoir l'accent, de sorte que lorsque vous définissez la mise au point sur le formulaire, il définit en réalité la mise au point sur le premier contrôle pouvant accepter le focus qui a le plus bas
tabindex code > valeur. Dans ce cas, c'est votre bouton. P> P>
Méfiez-vous que ProcessCMDKey () est pas i> un substitut de KeyPress. Il y a une grande différence entre les clés virtuelles et les personnages qu'ils sont traduits. Il n'y a pas de bon moyen d'obtenir l'équivalent de KeyPress.
J'utiliserais un em> des éléments suivants: p>
Définissez la propriété Définissez la propriété
Hmm, il dit que le bouton a i> la mise au point lorsque le formulaire est chargé, je ne peux donc supposer que s'il répond déjà lorsque l'utilisateur appuie sur la touche ENTER (ou SPACE). La question ne spécifie pas une clé particulière qu'il souhaite attraper; Je soupçonne que ce n'est probablement pas entré.
SET KeyPreview = true sur la forme principale p>
J'ai eu ce même problème et je sais que cette question a été répondue il y a longtemps, mais ma solution à ce problème est venue d'une autre question de dépassement de pile dans laquelle mon seul bouton saisit et n'a pas été mis à cœur. J'ai accepté les conseils des utilisateurs et j'ai créé un bouton qui ne pouvait pas se concentrer.
Peut-être que quelqu'un trouvera cela utile: p>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace I2c_Programmer { class NoSelectButton : Button{ public NoSelectButton() { SetStyle(ControlStyles.Selectable, false); } } }