7
votes

Feuil Form TressPress Event

J'ai une winform C #, sur laquelle j'ai 1 bouton.
Maintenant, lorsque j'exécute mon application, le bouton se concentre automatiquement.

Le problème est keypress de mon formulaire ne fonctionne pas car le bouton est concentré.

J'ai essayé this.focus (); sur Formule () événement, mais toujours l'événement KeyPress ne fonctionne pas.


0 commentaires

5 Réponses :



11
votes

Vous devez remplacer le Processcmdkey 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: xxx

comme pour pourquoi this.focus () ne fonctionne pas, c'est parce qu'un formulaire ne peut pas avoir l'accent par lui-même. Un contrôle 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 valeur. Dans ce cas, c'est votre bouton.


1 commentaires

Méfiez-vous que ProcessCMDKey () est pas 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.



0
votes

J'utiliserais un des éléments suivants:

  1. Définissez la propriété tabindex du bouton sur 0.

  2. Définissez la propriété isdefault du bouton sur TRUE - ainsi, il sera donc tiré lorsque vous appuyez sur la touche entrée .


1 commentaires

Hmm, il dit que le bouton a 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é.



1
votes

SET KeyPreview = true sur la forme principale


0 commentaires

0
votes

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);

        }
    }
}


0 commentaires