9
votes

Obtenez le caractère de contrôle de contrôle?

Lors de la manipulation Control.OnkeyPress Evénement, il existe un keighpresserEventargs contenant un keychar . .

Pour des raisons de convivialité, j'ai besoin exactement le même keychar mais lors de la manipulation ONKEDOODOD événement.

Le keeventargs ne contient aucune donnée connexe. Je veux dire, si appuyez sur la touche A avec ou sans Shift SI N'affect pas n'affectant pas le code KeyCode , keydata ou ou KeyValue . La même chose lors de l'utilisation d'une autre langue, je reçois toujours des valeurs anglaises en anglais.

Comment obtenir un keighpressereventargs.keychar intérieure clé événement?

merci.


2 commentaires

Et quel frais voulez-vous quand la touche Alt est libérée?


KeyPress Ne pas tirer lorsque la touche Alt est publiée, mais Keydown Tir de toute façon, dans ce cas, le char "\ 0 'est assez bon.


3 Réponses :


2
votes

Je pense que ce que vous cherchez est en fait la propriété de code-clés.

private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    // Determine whether the key entered is the F1 key. If it is, display Help.
    if(e.KeyCode == Keys.A)
    {
        // Do something kewl
    }
    else if(e.KeyCode == Keys.B)
    {
        // Do something even kewler
    }
}


0 commentaires

11
votes

Convertissez-le. Voici une fonction simple pour convertir 'A' à 'A'. Il convertit uniquement des caractères de capital de [A-Z] Strong> Set. La valeur 32 est diff entre "A" et "A" .. Bien sûr, vous pouvez l'étendre à vos exigences ou demander une fonctionnalité ici.

protected override bool ProcessKeyMessage( ref Message m )
{
 if ( ( m.Msg == 0x102 ) || ( m.Msg == 0x106 ) ) // this is special - don't remove
 {
  char c = (char) m.WParam; // here is your char for OnKeyDown event ;)
 }
 return base.ProcessKeyMessage( ref m );
}


3 commentaires

Et comment je considère la langue active? Par exemple, si la langue active est russe, je veux obtenir des caractères russes.


Vous devriez remplacer la méthode de contrôle processkeyyMessage comme décrit dans mon message.


En début, je pensais que cela ne vérifierait pas la serrure des capuchons, mais je viens d'effectuer un test dessus et qu'il définit le drapeau de décalage si le verrouillage des capuchons est en hausse et que le changement n'est pas enfoncé. alors bravo (y)



0
votes

Si la raison pour laquelle vous souhaitez utiliser la clé au lieu de KeyPress consiste à capturer les informations supplémentaires données à un événement de clé, pourriez-vous peut-être capturer ces informations supplémentaires dans un événement de clé, puis l'utiliser lorsque vous obtenez la touche de frappe? Plutôt une approche Hokey, pour être sûr, mais je ne suis pas sûr d'une autre approche qui fonctionnera vraiment dans une cartographie clavier qui a des "clés mortes" (c'est-à-dire des séquences à deux clés qui produisent un seul caractère). Je ne sais pas pourquoi Microsoft n'a pas mené plus d'informations à l'événement KeyPress (ou à un grand nombre de ses événements, car une tentative de correspondance n'est pas parfaite, mais je n'ai pas 't sais vraiment une meilleure alternative.


1 commentaires

La raison pour laquelle je veux utiliser keydown au lieu de keypress est de réduire l'heure entre l'utilisateur enfoncé une touche jusqu'à la réponse de mon programme. KeyPress CAOUTER UNIQUEMENT après que l'utilisateur a quitté la clé, ce qui ajoute un temps supplémentaire inutile jusqu'à ce que mon programme réponde.