IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Clavier virtuel - gestion focus


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 54
    Par défaut Clavier virtuel - gestion focus
    Bonjour,

    J'ai intégré dans mon application C# sous VS2005, mon propre clavier virtuel sous forme d'un UserControl. Pour que cela fonctionne je dois mémoriser le controle qui à le focus au moment de l'appui sur une touche de mon clavier virtuel et restaurer le focus sur ce control avant d'envoyer une simulation de ma touche par (SendKey.Send). Avec les txtBox ou autres controles de ce type cela fonctionne parfaitement. Je rencontre un problème de focus lorsque je souhaite utiliser mon clavier virtuel sur des objets tels que les ComboBox ou les DBGridView.
    Sur ces controles, quand je restaure le focus, je perd la position du curseur et je me retrouve toujours avec l'ensemble de mon texte selectionné d'où la perte du contenu quand j'envoie le caractère.
    Dans mon code j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    //Mon constructeur
    public Form_Login()
            {
                InitializeComponent();
                InitializeDisplay();
                GetCBUsersList();
     
                this.TxBox_password.LostFocus += new EventHandler(ControlLostsFocus);
                this.TxBox_ConfirmPassword.LostFocus += new EventHandler(ControlLostsFocus);
                this.CB_Users.LostFocus += new EventHandler(ControlLostsFocus);
     
    	    MI_KeyboardCtrl Kbd = new MI_KeyboardCtrl();
     
                Kbd.MIKeyPressed += new MI_KeyboardCtrl.MIKeyPressedEventHandler(Kbd_MIKeyPressed);
     
                System.Windows.Forms.Control Ctrl = this.TopLevelControl;
     
                Ctrl.Controls.Add(Kbd);
                Kbd.BringToFront();
                if (lastActiveControl != null)
                       lastActiveControl.Select();
     
     
            }
     
    //Memorisation du control qui perd le focus
    void ControlLostsFocus(object sender, EventArgs e)
            {
                lastActiveControl = this.ActiveControl;         
            }
     
    //Event recu de mon keybord indiquant la touche pressée
     void Kbd_MIKeyPressed(object sender, string KeyPressed)
            {
                if (lastActiveControl != null)
                {
                    lastActiveControl.Select();
                }
     
                SendKeys.Send(KeyPressed);
     
            }
    Ce qui pose problème ici c'est que je ne sais pas comment mémoriser la position de mon curseur dans ma ComboBox (exemple si on utilise les touches LEFT et RIGHT).
    Je peux connaitre la position avec SelectionStart et SelectionLength mais sur quel event je peux mémoriser cette info pour l'avoir juste avant le clic sur mon clavier (Il n'existe pas d'event du type PosCursorChanged) ?

    Autre question : Comment fonctionnent les claviers virtuels autonome qui n'influe pas (en apparence) sur le control qui a le focus ?



    Merci pour votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 54
    Par défaut Clavier Virtuel - Gestion de focus
    Bonjour,

    En fait j'aimerais comprendre comment fonctionne un clavier virtuel tel que celui fourni avec Windows pour que le control qui à le focus le garde lorsque l'on appui sur une touche du clavier virtuel (ou le restaure) sans perdre la position du curseur et cela quelque soit le type de control (par exemple une comboBox).
    Si quelqu'un a une source qui permet de faire cette gestion, je suis preneur !!

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    En fait le problème est inverse

    Le problème (qui n'en est pas un) est de laisser le focus au control qui le possède. En d'autres termes, ton application ne doit pas le lui prendre.

    Il s'agit simplement de passer le paramètre WS_EX_NOACTIVATE à ta fenêtre lors de sa création.

    Je ne fais pas de C ni de .NET , mais tu ne devrais pas avoir de difficulté à trouver sur le net.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 54
    Par défaut clavier virtuel
    Merci Andnotor pour ta piste !

    J'ai effectivement trouvé un lien qui parle exactement de mon problème et de la gestion du focus (ou plutot de laisser le focus) :

    http://blog.cvk.fr/?p=26

    Je pense que c'est la bonne démarche. Pour ma part j'ai traité chaque champs de saisie individuellement (car je n'en avais pas beaucoup). Si j'ai le temps un jour, je testerai cette solution.

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Clavier Virtuel et Focus
    Par Paul TOTH dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 21/03/2013, 05h45
  2. Gestion clavier virtuel
    Par diagonale dans le forum Android
    Réponses: 1
    Dernier message: 28/12/2012, 15h07
  3. [WD12] Clavier Virtuel sans prise de focus
    Par chailanc dans le forum WinDev
    Réponses: 7
    Dernier message: 22/06/2010, 16h57
  4. Clavier virtuel et focus sur page HTML
    Par salma92 dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 08/08/2008, 17h41
  5. Clavier virtuel
    Par ouquoi dans le forum MFC
    Réponses: 2
    Dernier message: 22/02/2006, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo