2009-01-28 5 views
2

matin tout,Compact Framework - Désactiver les événements de souris pendant les charges

Je conçois un certain nombre d'applications cadre compact, et quelque chose qui me échappe toujours est un moyen d'empêcher ce que nous appelons le syndrome de banque yorkshire (de YBS). YBS est nommé avec amour après les points de trésorerie à Yorkshire Bank en raison du fait que leur rafraîchissement d'écran est si lent, et un de mes collègues a appuyé deux fois sur le bouton en pensant qu'il n'avait pas appuyé sur le bouton le £ 20 qu'il voulait (les boutons "Cash Without Receipt" et "£ 100" ont été affectés au même bouton sur les deux écrans différents).

Fondamentalement, je charge tous mes formulaires avec un écran de démarrage au début de l'application et chaque autre forme a un événement public appelé Initialise(). Pour afficher un formulaire, j'ai utilisé Session.Instances.FormName.Initialise() puis un showdialog().

La méthode Initialise() appelle normalement une sorte de réinitialisation de formulaire ou de chargement de données, de sorte que le curseur est également défini dans cette méthode. Le problème survient lorsque l'utilisateur clique sur un bouton pour afficher un formulaire, que le formulaire se charge, mais s'il clique sur l'écran entre temps, ce clic d'écran est transmis au formulaire en cours de chargement (mais non affiché). Par exemple, je clique sur un bouton pour afficher un formulaire, puis sur en bas à gauche de l'écran. Par exemple, je clique sur un bouton pour afficher un formulaire. Dans la plupart de mes applications CF, le bouton en bas à droite est le bouton de retour qui définit DialogResult.Cancel. Ainsi, une fois le chargement terminé, le formulaire n'apparaît pas car le bouton Précédent a été cliqué, même si le formulaire n'a jamais été affiché.

J'ai essayé un certain nombre de choses, y compris this.Enabled = false au début de l'initialisation(), mais il semble que le clic est stocké en arrière-plan, puis l'événement click tiré sur l'écran lorsque le chargement avoir fini. Donc, je me demande maintenant s'il y a un moyen d'interdire toute entrée de la souris pendant mon chargement et de ne l'activer qu'à nouveau juste avant mon Form.ShowDialog()? OU quelqu'un a-t-il de meilleures idées pour y parvenir?

Répondre

2

Chris Tacke a créé ApplicationEx dans le cadre de OpenNETCF. Il permet d'obtenir tous les messages Windows reçus par votre application.

Il existe un exemple de son utilisation here.

+0

Et un autre exemple ici: http://blog.opennetcf.com/ctacke/2007/05/07/SDFSampleGettingMouseUpAndMouseDownForControlsWithoutThoseEvents.aspx – ctacke

0

Une méthode brute que j'ai déployée dans mes jeunes années était de définir une minuterie pour raccorder les événements aux éléments de l'interface utilisateur sur un formulaire après la charge. Cela a fait le travail dans ce cas.

Ces jours, je n'ai pas eu beaucoup de problème, surtout si je précharge les formulaires. Peut-être que le problème réside dans l'exécution d'une certaine forme d'opération de données longish sur le thread UI lors de l'affichage du formulaire?

Si vous voulez entrer dans le "hack" territoire, vous pouvez toujours essayer de lancer un Application.DoEvents() quelque part dans une tentative médiocre pour effacer le tampon.

Questions connexes