Comment transférer événement clavier ?

ttvi2005 Messages postés 14 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 12 août 2006 - 30 sept. 2005 à 23:18
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 1 oct. 2005 à 13:00
Bonjour,

Je voudrais savoir comment pourrais-je transferer un événement entre 2 contrôles.

Par exemple, j'ai une listview qui capture une touche (sur KeyDown) et je voudrais transférer cette touche (e.KeyCode) vers un textbox (sur KeyDown).

Merci.

4 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
30 sept. 2005 à 23:39
Salut,

Ca dépend de ton but.
Si il s'agit juste de déclencher la levée de l'event KeyDown du TextBox, un peu de "reflection" devrait suffire, encore que un appel direct du même code serait plus judicieux que de faire ça.

Après je pense plutôt que ton but est de "transmettre complètement" l'appui, c'est à dire si j'appuie sur 'a' surle listview ça marque 'a' dans le TextBox non ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
30 sept. 2005 à 23:55
Au cas où ce serais bien ça : une solution serait de poster un message WM_KEYDOWN sur le TextBox.

Basiquement :

[DllImport("user32.dll", SetLastError = true)]
static extern bool PostMessage(
IntPtr hWnd,
uint Msg,
IntPtr wParam,
IntPtr lParam
);


private const int WM_KEYDOWN = 0x0100;


private void PostKeyDown(Control ctrl, KeyEventArgs e)
{
IntPtr wParam = new IntPtr((int)e.KeyCode);
IntPtr lParam = IntPtr.Zero;


PostMessage(ctrl.Handle, WM_KEYDOWN, wParam, lParam);
}

Appel :
private void listView_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
this.PostKeyDown(this.textBox, e);
}

Maintenant il faudras probablement que tu initialises le lParam correctement, conformément à la doc :
=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputmessages/wm_keydown.asp WM_KEYDOWN Notification

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
ttvi2005 Messages postés 14 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 12 août 2006
1 oct. 2005 à 12:33
Merci bcp pour les réponses.

C'est exact, mon but est de "transmettre complètement" l'appui (appui sur 'a' sur le Listview (car c'est lui qui a le focus) provoque l'affichage de 'a' dans le TextBox, et l'appui sur touche 'back' dans la Listview provoque l'effacement du dernier caractere dans le TextBox).

Est-t-on obligé de passer par la "user32.dll" (utilisant la fonction "PostMessage") pour transmettre l'événement ?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 oct. 2005 à 13:00
A priori non.
A moins peut être d'utiliser la Reflection pour invoquer la méthode WndProc du contrôle en lui passant le message, mais de toutes façon ça serait plus lourd je pense.

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Rejoignez-nous