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 :
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).
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); }
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
Partager