none
Gestion du clavier en WinForm .Net 2.0 RRS feed

  • Question

  • Bonjour,

    J'ai une petite application WinForm en VB sous .NET 2.0 qui gère le clavier. Le but est la réalisation un contrôle du style TextBox avec un fond transparent afin qu'il se superpose à l'image qui occupe le BackGround du formulaire.

    Le formulaire a sa propriété KeyPreview=True, donc il reçoit les caractères dans l'évènement KeyDown et KeyPress pour certains.

    Les caractères "ordinaires" provoquent KeyDown puis KeyPress. Ils sont correctement reçus et traités. Bien. Cependant je vois que certains événements ne sont pas reçus par KeyDown comme ils devraient l'être, par exemple les flèches Left, Right et le Return et sans doute d'autres encore. Par contre ils sont reçus si j'appuie sur Ctrl en même temps. Je ne comprends pas la raison de ce comportement... d'autant que, dans une version antérieure, cela fonctionnait.

    Les événements Home et End, par exemple, sont bien reçus par le Form.

    Avez-vous une idée de la raison de ce comportement ? Une suggestion ?

    Merci à vous.



    Alain
    vendredi 29 janvier 2010 13:24

Réponses

  • Bonjour Alain,

    J'ai trouvé un article intéressant sur ce problème :
    http://edn.embarcadero.com/article/30129

    A la fin du project 1, voilà ce qu'il dit :
    In order to have the arrow keys raise the KeyDown event, we must override the IsInputKey method in each focusable control on our form. The code for the override of the IsInputKey would need to determine if one of the special keys is pressed and return a value of true.

    Je te laisse regarder l'exemple, je pense que surcharger la méthode IsInputKey résoudra ton problème.

    Cordialement,

    Thomas

    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    • Marqué comme réponse AchLog vendredi 29 janvier 2010 19:47
    vendredi 29 janvier 2010 13:42

Toutes les réponses

  • Bonjour Alain,

    J'ai trouvé un article intéressant sur ce problème :
    http://edn.embarcadero.com/article/30129

    A la fin du project 1, voilà ce qu'il dit :
    In order to have the arrow keys raise the KeyDown event, we must override the IsInputKey method in each focusable control on our form. The code for the override of the IsInputKey would need to determine if one of the special keys is pressed and return a value of true.

    Je te laisse regarder l'exemple, je pense que surcharger la méthode IsInputKey résoudra ton problème.

    Cordialement,

    Thomas

    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    • Marqué comme réponse AchLog vendredi 29 janvier 2010 19:47
    vendredi 29 janvier 2010 13:42
  • Bonjour Alain,

    En faisant ce qui suit, ça semble fonctionner !
     Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        MsgBox(e.KeyCode)
    End Sub
    

    Cordialement.

    Joe ___ Romans et Logiciels ___ http://irolog.free.fr
    • Modifié EhJoe vendredi 29 janvier 2010 15:20 1
    • Proposé comme réponse François Dupont mardi 9 mars 2010 17:47
    vendredi 29 janvier 2010 14:52
  • Merci à Thomas et EhJoe pour leur réponse. La solution se trouve en effet dans le document indiqué par Thomas. Il faut surcharger IsInputKey comme indiqué dès qu'il y a au moins sur le Form un contrôle qui peut recevoir le focus car, dans ce cas, celui-ci intercepte les événements liés au clavier.

    Merci pour votre aide.


    Alain
    vendredi 29 janvier 2010 19:47