Salut à tous.

Je cherche une solution plus élégante à un problème de copier/coller.

J'ai besoin de capturer la commande "Coller", pour remplir les données dans un DataGridView depuis Excel.

En gros : Je fais un copier depuis Excel, je colle dans un DataGridView, je souhaite que les données se collent dans les cellules comme elles étaient dans Excel. Si les données vont dans un autre composant, ou si la source n'est pas un excel, alors j'exécute le coller "normal". Jusque là tout va bien, j'ai trouvé comment récupérer les données exactes, et les coller dans mon DataGridView. Mon problème vient plus de la capture du C-v (Control V pour ceux qui n'auraient pas suivi )

Je n'ai pas de menu sur le bouton droit pour coller (chose voulue, on a dit que de toute façons, tout les utilisateurs de cette application connaissent le C-c C-v), et donc la seule méthode pour coller passe par le C-v. Pour ça, j'ai mis en place une hotkey qui capture le C-v via un appel API à RegisterHotKey.

Le problème étant qu'il faut activer la hotkey quand on active la Form, et la désactiver quand on quitte ou qu'on désactive la Form, car sinon, le C-v ne fonctionne plus dans les autre applis.

Problème, de temps en temps, mon Form.Activated n'est pas levé, et donc le C-v ne fonctionne pas dans l'appli tant que je ne ressors pas et que je ne rerentre pas dans l'appli (juste un changement de fenêtre à coup de alt+tab, c'est pour déclencher le Form.Activated pour réenregistrer la hotkey). Autant moi ça ne me gêne pas (la fonction est bien appelée à chaque fois), autant les utilisateurs, eux, se plaignent du bug. Chose que je peux comprendre, si ça m'arrivait aussi, je serais le premier à gueuler . J'ai découvert que le Form.Activated n'était pas activé comme il faut quand j'ai compilé une version avec des traces, que j'ai donc généré un trace.log avec les appels faits par l'appli, et là je peux voir
Code text : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
frmMain_Activated
frmMain_Deactivate
frmMain_Deactivate
Il y a une fois où la Form est passé dans l'event "Deactivate" alors qu'elle n'est pas passée dans l'event "Activated"...

Deuxième problème, qui lui en revanche me gêne.... les points d'arrêt.
Quand je suis sur un point d'arrêt, logiquement je ne passe pas dans frmDeactivate, puisque je suis en train de capturer un point d'arrêt alors que j'ai la fenêtre active, et qu'il interromp toute exécution. Donc, je ne libère pas la hotkey, et donc, je n'ai pas de C-v dans toutes les autres applis.... et c'est plutôt chiant.

Est ce qu'il y a moyen de faire un truc plus propre pour remplacer la fonction coller ?