Convertir e.keycode en char

Résolu
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 28 juin 2015 à 09:16
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 28 juin 2015 à 11:35
Bonjour,

Je déclare une list of char
 Private remainletters As New List(Of Char)


je remplis cette liste et verifie à l'évenement Form1_KeyDown si le key
se trouve dans la liste .
J'utilise les caractères du clavier espagnol(que j'ai ajouté)
le clavier de base est us
Le problème est que
Si par ex remainletters contient Ñ et que je frappe la touche qui correspond
à la lettre Ñ j'obtiens un résultat erroné

 Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

If Not remainletters.Contains(Convert.ToChar(e.KeyCode)) And (e.KeyValue <> 8) Then
Exit Sub
End If





Merci

4 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 juin 2015 à 10:30
Bonjour,

Je ne crois pas que cela soit possible, dès lors que Windows réagit en fonction, à la fois :
- de la touche pressée (sa position)
- de l'affectation faite d'un caractère à cette touche
Or, il n'y a à ma connaissance qu'une seule affectation possible : celle définie pour l'objet clavier (global).
Pour être plus clair : si par exemple tu :
- branches un clavier azerty
- et un second clavier qwerty
- et que tu choisis de déclarer que ton clavier est Français
===>>>
la pression de la touche A sur le clavier français affichera "a"
la pression de la touche Q sur le clavier anglais affichera également "a" et non "q".

0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 juin 2015 à 10:36
Il te faut donc à mon sens nécessairement déclarer que tu vas utiliser tel ou tel autre clavier avant de l'utiliser
Sous VB.Net, cela peut apparemment se faire comme tu le verras ici :
http://www.commentcamarche.net/forum/affich-11596045-changement-de-langue-sous-vb-net
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
28 juin 2015 à 10:53
Bonjour, vite fait, il y a peut-être moyen de prendre directement le bon cultureinfo sans passer par la récupération de tous les existants

        Dim es As Globalization.CultureInfo = Globalization.CultureInfo.GetCultures(Globalization.CultureTypes.AllCultures)(9)
        Dim c As Char = Convert.ToChar(209, es)

0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
28 juin 2015 à 11:35
Merci à vous deux
en bricolant un peu

Dim c As Char
If e.KeyCode = Keys.Oem3 Then
c = "Ñ"c
Else
c = Convert.ToChar(e.KeyCode)
End If
If Not remainletters.Contains(c) And (e.KeyValue <> 8) Then
Exit Sub
End If


ou

 Dim c As Char
Dim es As Globalization.CultureInfo = Globalization.CultureInfo.GetCultures(Globalization.CultureTypes.AllCultures)(9)
If e.KeyCode = Keys.Oem3 Then
c = "Ñ"c
Else
c = Convert.ToChar(e.KeyCode, es)
End If
If Not remainletters.Contains(c) And (e.KeyValue <> 8) Then
Exit Sub
End If
0
Rejoignez-nous