IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[Form] Bloquer complètement les inputs sur une forme et ses contrôles


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut [Form] Bloquer complètement les inputs sur une forme et ses contrôles
    Bonjour,

    Voilà, je voudrais trouver le moyen de bloquer complètements les inputs sur une forme et tous ses contrôles enfants.

    Pour le moment j'utilise Form.Enable pour désactiver la forme. Cela fonctionne au niveau de la fonctionnalité, mais toute la forme et ses contrôles deviennent grisés et visuellement cela me pose un problème, car je fais ça partfois plusieurs fois de suite, ce qui fait un effet graphique désagréable.

    J'ai essayé d'utiliser la fonction de l'API Win32 EnableWindow() pour désactiver mes formes, mais le problème avec cette fonction est que si une forme est modale, lors de la réactivation elle ne l'est plus. Ce n'est pas le comportement souhaité.

    L'idéal pour moi serait d'avoir une propriété sur la forme, comme Enable, mais qui ne me grise pas la forme et ses contrôles enfants, par contre qui, comme Enable, désactive complètement les inputs.

    Merci de votre aide!

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    cette fonction n'existe pas dans les composant winforms standard. Tu peux passer les textbox en readonly, mais c'est valable pour les textbox uniquement.

    L'autre solution serait de t'orienter vers des composants tiers gérant le readonly (les composants devexpress par exemple).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut
    Si des composant gèrent cette fonctionnalité, je dois aussi pouvoir le faire en passant par l'API.

    J'ai presque atteint mon but avec la fonction EnableWindow(), s'il n'y avait pas ce problème avec les formes modales.

    Je cherche vraiment un moyen de le faire moi-même...

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Je sais pas si ça correspond à ton besoin, mais si jamais tu cherches à bloquer les input parce que tu es en train d'effectuer un traitement long, le fait de passer le curseur en WaitCursor (sablier) bloque l'UI de la form en question, il me semble.

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    tu peux aussi (mais bon, c'est bourrin)

    declarer une fonction qui ne fait rien et que tu branches sur le message filter de ton application

    (voir le dossier sur le Hook réaliser en .Net ya pas très longtemps ici)

    The Monz, Toulouse

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut
    Alors en fait pour ce qui est du sablier, parfois il disparaît tout seul et du coup l'interface redevient disponible, notamment lors de l'appel de certaines méthodes comme Application.DoEvents().

    Maintenant j'ai trouvé une solution à mon problème:

    J'utilise en effet la fonction de l'API user32.dll "EnableWindow", qui permet de bloquer les inputs sur les fenêtres.

    Pour ce qui est du problèmes des formes qui sont modales, j'ai implémenté un algorithme base sur le pattern Observer qui permet à toutes les formes de se désactiver d'elles-mêmes lors du démarrage d'un état de chargement. Dans cet algorithme, si au moins une forme modale est affichée, je bloque l'interface de celle-ci, puisque de toute manière les autres ne peuvent pas être atteintes car la forme modale est devant. Alors que s'il n'y a pas de forme modale affichée, je désactive toutes les formes qui le sont et qui ne sont donc pas modales.

    J'ai eu l'occasion de tester l'algo et cela semble très bien fonctionner.

    Cela demandait un peu de mise en place...

    Merci de votre aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/07/2012, 13h08
  2. Récupérer tous les composants posée sur une forme
    Par toutounesan dans le forum VB.NET
    Réponses: 10
    Dernier message: 20/06/2011, 17h08
  3. Repositionner les controle sur une Form
    Par MegaTen dans le forum C#
    Réponses: 1
    Dernier message: 27/03/2010, 22h31
  4. Scale ou Zoom sur les Controls d'une form?
    Par Odeonn dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/01/2010, 15h29
  5. Garder les proportions d'un pagecontrol sur une form
    Par neuneu1 dans le forum Delphi
    Réponses: 4
    Dernier message: 16/05/2007, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo