Je ne veux pas que l'utilisateur interagit avec ma candidature pendant que un travailleur d'arrière-plan est occupé (travail). J'ai créé ce BGW afin que l'application n'a pas l'air gelée lorsqu'elle fonctionne. Mais maintenant, les utilisateurs peuvent se déplacer dans l'application. Comment désactiver mon formulaire / mon application? P>
Merci! P>
5 Réponses :
peut-être défini c'est un peu drastique cependant, car il empêche également le formulaire d'être déplacé , redimensionné ou événement fermé. Une meilleure approche serait de mettre un contrôle code> code> de votre formulaire, qui a Remarque pensait que l'utilisateur sera em > Soyez capable de fermer la forme, de sorte que cela devrait être traité de manière gracieusement. p> p> activé code> à
false code>?
dock = remplir code> et mettre nos autres contrôles dans ce panneau code> code>. Ensuite, vous pouvez utiliser la propriété
activée code> du panneau code> pour empêcher la saisie de l'utilisateur supplémentaire. P>
C'est une façon rapide et sale de le faire, mais cela pourrait être meilleur (selon votre situation) que de désactiver chaque contrôle sur la forme que l'utilisateur peut interagir.
@Michael: La désactivation du formulaire est en effet rapide et sale: o)
Merci, j'ai fait quelque chose de similaire à ce que Michael a suggéré.
Et aussi ce que Fredrik s'est complété à sa réponse originale ... merci!
Utilisation de cela, je ne peux pas changer le curseur de la souris en curseurs.Waitcursor :(
Une autre manière possible pourrait être que vous "filtrer" toute l'entrée à l'application. Cela pourrait être fait en écoutant le "Keydown" et "MouseButTondown". Une fois que le travail d'arrière-plan est déclenché, vous pouvez définir le drapeau filtrant_input sur true et le réinitialiser une fois terminé. Si le drapeau filtrant_input est défini, peut annuler tous les événements de la clé et de la souris. P>
Ceci peut ne pas être le plus efficace depuis que tous les claviers et les clics vont aller thro the Filtre Check. P>
Je suis d'accord avec @ Michael-Todd dans son commentaire ci-dessus, désactivant les contrôles individuels / boutons de navigation / etc. Alors que le travailleur de fond fonctionne semble être une solution assez bonne. Cela vous donnerait un contrôle fin-grain sur ce que l'utilisateur peut faire pendant l'opération de fond spécifique. P>
vous pourriez: p>
Vous pouvez également créer une boîte de dialogue modale "Bupéra Splash" affichée lorsque la tâche d'arrière-plan commence et supprimée par programme lorsque la tâche se termine. Vous pouvez également mettre une petite animation dans cette boîte aussi pour que les utilisateurs savent que quelque chose se passe. Vous auriez également besoin de vous assurer qu'ils ne ferment pas la boîte de dialogue manuellement (ne le permettent que de se fermer de manière programmatique). P>
Cela peut être assez bon, surtout lorsque vous souhaitez que la forme principale reste visible et inchangée. Vous pouvez même utiliser une boîte de dialogue très petite ou cachée.
L'autre chose que j'ai faite est d'avoir tout sous la forme contenue dans un panneau, puis de masquer le panneau et de mettre un message "occupé". De cette façon, il n'y a aucun moyen d'interagir avec les contrôles sous-jacents.
Il est plus facile de gérer certaines contrôles de certains contrôles en les plaçant à l'intérieur d'un panneau et en désactivant ce panneau plutôt que de désactiver des contrôles individuels: un moyen courant de bloquer d'autres tâches, pouvant atteindre votre Les besoins sont en montrant une forme la plus élevée avec une barre de progression. J'ai mis en œuvre cela dans le passé avec succès. D'autres programmes font la même chose. Par exemple, en WinRar, lorsque l'appliciation est occupée à extraire ou à compresser des fichiers, l'application montre une forme la plus importante. Il ressemble à une forme "modale", mais en fait, vous pouvez toujours cliquer sur les autres fonctions, à laquelle WinRar demande: "Souhaitez-vous abandonner l'opération en cours?" P> désactivation de l'application complète est souvent pas nécessaire et peut ne pas être intuitif. Donc, demandez-vous si vous avez vraiment besoin de bloquer l'interaction avec le formulaire. Par exemple, j'ai une application qui prend un certain temps pour compléter certaines tâches. Je fournis un indicateur de barre de progression pour ce travail particulier, mais vous pouvez toujours interagir avec l'application pour lancer des tâches supplémentaires qui fonctionnent simultanément. Même si je vous ai seulement permis d'effectuer une tâche unique à la fois, vous pouvez toujours afficher le fichier d'aide ou définir les préférences de l'application pendant que la tâche était en cours d'exécution. De plus, je donne à l'utilisateur un bouton qui leur permet d'arrêter la tâche. La désactivation du formulaire empêcherait ce type d'interaction. P> p>
Si vous voulez désactiver le formulaire tout en déplaçant le code à l'arrière-plan, quel est le point dans le déplacement de l'arrière-plan?
Parce qu'en travailleur d'arrière-plan Windows, Windows affirmera que l'application "ne répond pas" si l'utilisateur essaie d'interagir avec elle.