Je souhaite créer un pavé numérique virtuel, similaire au clavier virtuel. Comment puis-je empêcher l'activation/la mise au point du formulaire, de sorte que lorsque j'appuie sur un bouton, l'appel SendKeys.Send passe au bon formulaire? Je suis certain que je dois utiliser une API non gérée pour cela, mais à part ça, je ne sais même pas par où commencer. Merci pour toute aide!Création d'un pavé numérique virtuel: arrêt de l'activation ou de la mise au point du formulaire
Répondre
Vous pouvez contrôler la façon dont votre formulaire est créé en remplaçant la propriété CreateParams protégée:
protected override CreateParams CreateParams {
get {
var cp = base.CreateParams;
// Configure the CreateParams structure here
return cp;
}
}
Je vous conseille d'essayer le style suivant:
int WS_EX_NOACTIVATE = 0x08000000;
cp.ExStyle = cp.ExStyle | WS_EX_NOACTIVATE;
Le style WS_EX_NOACTIVATE
empêche l'entrée de la souris de donner un focus de fenêtre (vous pouvez l'utiliser pour créer des fenêtres semblables à des bulles d'aide, par exemple.)
Vous pouvez combiner ceci avec d'autres styles (comme WS_EX_TOPMOST
) pour obtenir le comportement que vous recherchez.
Un formulaire qui n'a pas de focus ne reçoit généralement pas de saisie au clavier. Donc, je ne suis pas sûr de savoir comment cela fonctionnerait.
Si le pavé numérique ne doit fonctionner que dans les applications que vous écrivez, vous pouvez simplement garder une trace du dernier contrôle de saisie valide qui a eu le focus. De cette façon, vous n'avez pas à vous soucier de quelque chose qui vole la vedette. Récemment, j'ai fait quelque chose de similaire en abonnant un tas d'événements Enter TextBoxes au même gestionnaire d'événement que mon handle de contrôle focalisé au paramètre sender. Cette méthode exacte peut ne pas fonctionner pour vous, mais l'approche pourrait le rendre plus facile.
Avec les applications que vous écrivez, tenez compte du modèle Observer.
Dans le cas général, vous pouvez ajouter une méthode Subscribe à votre clavier qui prend un délégué (également autoriser le désabonnement). Pour la gestion des événements de votre touche, passez en revue tous les délégués inscrits en leur envoyant le code de caractère.
code (la plupart du temps de la mémoire, extraits probablement ne compilera pas, mais si vous y aller)
delegate void KeyPadSubscription (char keyPressed);
List<KeyPadSubscription> subscriptions;
void KeyPress (object sender, KeyPressArgs e)
{
foreach (KeyPadSubscription sub in subscriptions)
sub (e.CharCode)
}
void Subscribe(KeyPadSubscription s)
{
subscriptions.Add(s);
}
void Unsubscribe(KeyPadSubscription s)
{
subscriptions.Remove(s);
}
Dans votre cas, vous n'avez pas besoin probablement la liste des délégués et une propriété pourrait suffire. Puis, lorsque vos formulaires changent de focus, la forme active définit sa méthode en tant que délégué pour votre clavier.
void MyForm_Activated(...)
{
//assumes keypad is global or static
KeyPad.Subsribe (this.HandleKeyPadPress)
}
- 1. Chiffres du pavé numérique dans la chaîne
- 2. Mise au point du champ de texte
- 3. C# détecter l'application mise au point mise au point
- 4. formes de mise au point
- 5. Mise au point à l'échelle du système
- 6. style de mise au point de contrôle
- 7. Mesure de mise au point Javascript
- 8. cellule de mise au point flex datagrid
- 9. Mise au point de Windows Vista Problème
- 10. Erreur d'exécution C++ Builder - impossible de faire la mise au point d'une fenêtre désactivée ou invisible
- 11. Mise au point de l'erreur .Net OracleClient
- 12. jQuery ScrollBar - Pas de mise au point?
- 13. UITextField dans une tableAfficher et éliminer le pavé numérique
- 14. Zone de texte Windows CE Problème de mise au point
- 15. Mise au point de OutputCache dans ASP.Net
- 16. Vérification de la mise au point d'un élément DOM
- 17. Réglage de la mise au point après animation Div
- 18. Mise au point dans ASP
- 19. pavé numérique + touche permet de sélectionner du texte dans Visual Studio
- 20. comment demander un pavé numérique dans une application web iphone?
- 21. Mise au point par programmation d'un hippo.CanvasEntry?
- 22. Pocket IE: la mise au point est parfois perdue
- 23. Chargement des modifications de la boîte de dialogue jQuery Fenêtre du navigateur Mise au point
- 24. Mise au point Interwoven Worksite Web Services
- 25. Comment utiliser le pavé tactile du pavé tactile .Net
- 26. Internet Explorer/Problème de mise au point jQuery
- 27. Figure Out si la fenêtre est mise au point
- 28. Capture des frappes sans mise au point
- 29. Android: Récupérer la mise au point en utilisant SurfaceView
- 30. Spécification Où mise au point dans Textarea
S'agit-il d'un clavier qui fonctionne avec _any_ application (comme le clavier virtuel sur les tablettes) ou uniquement pour les applications que vous écrivez? –
Seulement pour les applications que j'écris. J'ai outrepassé la méthode WndProc pour définir le message. Résultat: MA_NOACTIVATE, mais il semble que le formulaire soit toujours activé lorsque je clique sur un bouton. –